Mysql:将tinyint列与varchar值进行比较

时间:2016-03-01 12:59:43

标签: mysql sql

我正在查看一些代码,一些错误引起了我的注意。有人将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

Sqlfiddle

我的问题是为什么(任何)varchar值与int / tinyint列的数值0的行为方式相同?

1 个答案:

答案 0 :(得分:2)

MySQL在数字上下文中静默地将字符串转换为数字。

通过将前导数字字符转换为数字来实现。如果没有数字,则值为0.

因此,这相当于x1 = 0,因为这种转换。