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

Why does comparing types in MYSQL not raise an error?

这个:

SELECT * FROM table WHERE comlumn1 = column2;

returns 结果。

这个:

SELECT * FROM table WHERE column1 != column2;

return什么也没做,即使列中的单元格满足这两个请求。

原来column1是varchar,column2是int

我的问题是为什么没有报错?为什么一个 return 结果而不是另一个?如果类型不同,它们肯定总是不相等的?

更新:

column1 中的值 varchars 类似于 1234-34column2 中的值 ints 类似于 1234。这意味着它将始终匹配,因为它将 varchar 1234-34 变成 1234.

当您在 MySQL 中比较字符串和整数时,MySQL 会将字符串转换为整数。具体规则详见documentation。在您的情况下,这些将作为浮点数进行比较。

将整数转换为浮点数很容易。转换字符串使用隐式转换——转换字符串中遇到的第一个数字。如果有 none,则值为零。所以,'12.3abc' 变成了 12.3'abc' 变为 0.

这可能就是比较失败的原因。但是,我希望 = 失败,但 <> 成功。

将字符串与数字进行比较时,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