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