数据库某张表的某个字段(比如说test_id)类型为varchar,默认值为'0'。
代码里SQL查询条件为 test_id != 0
这里很明显可以发现条件的类型不对,应该改成test_id != '0'
。
但是上面那个写法并不会报错,因为MySQL在比较数字和字符串的时候,会自动转换字符串和数字。
不过这个转换有点问题,具体的看下面的例子:
SELECT '8a' != 0 ,'a' != 0, '0c' != 0;
输出结果为:
'8a' != 0 | 'a' != 0 | '0c' != 0 |
---|---|---|
1 | 0 | 0 |
其中,1代表true,0代表false。
可以看出在比较时会将字符串转成数字,转换规则为如果字符串的值为数字,直接转成数字,否则认为是0。