这是:
SELECT * FROM table WHERE comlumn1 = column2;返回结果。
这是:
SELECT * FROM table WHERE column1 != column2;没有返回任何内容,即使列中有满足这两个请求的单元格。
原来column1是varchar,column2是int。
我的问题是,为什么它没有出错?为什么其中一个会返回结果而不是另一个呢?如果类型不同,难道它们总是不平等吗?
更新
column1中的值为varchars,1234-34,column2有ints,1234。这意味着它总是匹配的,因为它会将varchar 1234-34转换为1234。
发布于 2016-07-05 11:44:45
当将字符串与数字进行比较时,MySQL尝试将字符串转换为数字以进行比较。
如果不可能,则字符串的数字结果是0。
示例:
string value | int value | comparison result
'abc' | 1 | 0 = 1 -> false
'1' | 1 | 1 = 1 -> true
'1abc' | 1 | 1 = 1 -> true
'abc1' | 1 | 0 = 1 -> false发布于 2016-07-05 11:42:11
在MySQL中比较字符串和整数时,MySQL将字符串转换为整数。具体规则在文档中进行了描述。在您的例子中,这些将被比较为浮点数。
很容易将整数转换为浮点数。字符串转换使用隐式转换--字符串中遇到的第一个数字被转换。如果没有,则值为零。因此,'12.3abc'变成了12.3,'abc'变成了0。
这可能就是这种比较失败的原因。然而,我认为=会失败,而<>会成功。
https://stackoverflow.com/questions/38202527
复制相似问题