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

dat*_*.io 0 mysql sql

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

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社区.

Gor*_*off 5

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

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

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

where id = cast('3df' as unsigned)
Run Code Online (Sandbox Code Playgroud)

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