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

时间:2016-01-29 14:39:11

标签: mysql sql where clause

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

URLConnection connection = url.openConnection();
connection.setConnectTimeout(1000);
connection.setReadTimeout(1000);
connection.connect();

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

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

评估到

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

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

您应该将0转换为varchar

select '0' in ('Some', 'Set')将评估为0