为什么SELECT ... WHERE id = a如果值为0则返回结果

时间:2016-03-18 12:27:15

标签: mysql sql select

Table preview 
Note: 'id' is an integer column (offcourse)

+-------------+
| id | value  |
+----+--------+
| 0  | abc    |
| 1  | def    |
+-------------+

查询:
1.返回abcSELECT value FROM table WHERE id = 0
2.返回defSELECT value FROM table WHERE id = 1
3.什么都不返回:SELECT value FROM table WHERE id = 2
4.返回abcSELECT value FROM table WHERE id = 'a'

问题:为什么查询4会返回abc?它应该没有结果吗?

1 个答案:

答案 0 :(得分:3)

MySQL在数字上下文中静默地将字符串转换为数字。

通过转换前导数字字符(例如数字,减号和小数点)来实现。

如果没有数字,则停止。所以:

where id = 'a'

被解释为:

where id = 0

道德:永远不要在数字常量周围使用单引号 - 或者应该是数字的常量。