MySQL自动字符串到where子句中的整数转换?

时间:2015-11-05 11:43:11

标签: mysql sql

我不是MySQL的新手,但今天我的代码中发生了一个奇怪的情况,让我感到惊讶。有人可以解释为什么这会给我相同的结果吗?

SELECT * FROM `products` WHERE id = 12

SELECT * FROM `products` WHERE id = '12ABC'

在这两种情况下,我都会得到相同的结果,同时选择相同的记录。我希望第二个会让我什么都没回来?!我的ID字段是int(11)unsigned,并且auto_increment标志已打开。

2 个答案:

答案 0 :(得分:3)

来自MySQL文档:

  

当运算符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容

Documentation

基本上,'12ABC'会转换为12

答案 1 :(得分:1)

MySQL必须进行转换才能在2种不同类型之间进行比较。它尝试将字符串设置为int并从头开始从字符串中获取数字。

你有例如

'ABC12'

将字符串转换为int的结果为0