为什么在MYSQL中比较类型不会引发错误?

时间:2016-07-05 11:40:13

标签: mysql sql error-handling varchar

此:

SELECT * FROM table WHERE comlumn1 = column2;

返回结果。

此:

SELECT * FROM table WHERE column1 != column2;

什么都没有返回,即使列中的单元格满足两个请求。

原来,第1列是varchar,第2列是int

我的问题是为什么不是错误?为什么一个人会返回结果而不是另一个?如果类型不同,肯定它们总是不相等?

更新

column1中的varchars1234-34,而column2的{​​{1}}为ints。这意味着它始终匹配,因为它会将1234 varchar转换为1234-34

2 个答案:

答案 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