MySQL 0 IN(“Some”,“Set”)

我有一个使用IN子句的MySQL查询.

SELECT SomeColumn
FROM SomeTable
WHERE SomeOtherColumn IN ('Some', 'Set')

但是,我偶然发现了一个案例,其中SomeOtherColumn的值为0,MySQL将where子句计算为TRUE:

SELECT 0 IN ('Some', 'Set')

评估到

1 (TRUE)

MySQL版本5.5.46.任何人都知道为什么会这样?

解决方法:

0被解释为数字文字.

parens中的值也被评估为数字文字.并且IN列表中的两个值都计算为0的数值.

(与其他数据库不同,MySQL在隐式转换为数字时有点慷慨.而不是抛出“无效数字”错误,它会尽力而为,并返回结果.)

相比于:

评估为字符串文字和比较:

 SELECT '0' IN ('Some','Set')

评估为数字文字:

 SELECT 0 IN ('1foo','2bar')

测试转换为数字:

 SELECT 'Some' + 0, 'Set' + 0

 SELECT '1foo' + 0, '2bar' + 0
上一篇:mysql报错:You can't specify target table 't_frame' for update in FROM clause


下一篇:MySQL 中 You can't specify target table '表名' for update in FROM clause错误解决办法