MySQL WHERE子句整数与字母字符的比较仍然正面?

时间:2017-09-05 10:34:06

标签: mysql sql

当我通过以下方式搜索特定行时:

SELECT * FROM table WHERE id = '0003'

其中列id是INT主键字段,它返回id = 3

再次,如果我搜索:

SELECT * FROM table WHERE id = '3df'

它仍然返回id = 3

这真的很奇怪。为什么呢?

我的Mysql版本是5.7.14社区。

1 个答案:

答案 0 :(得分:5)

MySQL在数字上下文中将字符串隐式转换为数字。

它通过转换前导数字并在第一个非数字处停止来实现。大多数数据库都会返回类型转换错误。

道德?在进行这样的比较之前,请始终确保类型兼容。如果您愿意,可以将其更改为明确的案例:

where id = cast('3df' as unsigned)

在这种情况下,您将收到类型转换错误。