我正在查看一些代码,一些错误引起了我的注意。有人将tinyint列与varchar值进行了比较。
但令人惊讶的是这是有效的(因为意图是与数值0比较)。
示例查询:
create table t1(x1 tinyint);
insert into t1 values (0),(0), (1), (2);
select * from t1 where x1 = 'live'
结果:
x1
0
0
我的问题是为什么(任何)varchar值与int / tinyint列的数值0的行为方式相同?
答案 0 :(得分:2)
MySQL在数字上下文中静默地将字符串转换为数字。
通过将前导数字字符转换为数字来实现。如果没有数字,则值为0.
因此,这相当于x1 = 0
,因为这种转换。