此:
SELECT * FROM table WHERE comlumn1 = column2;
返回结果。
此:
SELECT * FROM table WHERE column1 != column2;
什么都没有返回,即使列中的单元格满足两个请求。
原来,第1列是varchar
,第2列是int
。
我的问题是为什么不是错误?为什么一个人会返回结果而不是另一个?如果类型不同,肯定它们总是不相等?
更新:
column1
中的varchars
为1234-34
,而column2
的{{1}}为ints
。这意味着它始终匹配,因为它会将1234
varchar
转换为1234-34
。
答案 0 :(得分:1)
在MySQL中比较字符串和整数时,MySQL会将字符串转换为整数。具体规则在documentation中描述。在您的情况下,这些将被比较为浮点数。
将整数转换为浮点数很容易。转换字符串使用隐式转换 - 转换字符串中遇到的第一个数字。如果没有,则值为零。因此,'12.3abc'
变为12.3
; 'abc'
变为0
。
这可能是比较失败的原因。但是,我希望=
失败,但<>
会失败。
答案 1 :(得分:1)
将字符串与数字进行比较时,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