当我通过以下方式搜索特定行时:
SELECT * FROM table WHERE id = '0003'
其中列id
是INT主键字段,它返回id
= 3
再次,如果我搜索:
SELECT * FROM table WHERE id = '3df'
它仍然返回id
= 3
这真的很奇怪。为什么呢?
我的Mysql版本是5.7.14社区。 p>
答案 0 :(得分:5)
MySQL在数字上下文中将字符串隐式转换为数字。
它通过转换前导数字并在第一个非数字处停止来实现。大多数数据库都会返回类型转换错误。
道德?在进行这样的比较之前,请始终确保类型兼容。如果您愿意,可以将其更改为明确的案例:
where id = cast('3df' as unsigned)
在这种情况下,您将收到类型转换错误。