Table preview
Note: 'id' is an integer column (offcourse)
+-------------+
| id | value |
+----+--------+
| 0 | abc |
| 1 | def |
+-------------+
查询:
1.返回abc
:SELECT value FROM table WHERE id = 0
2.返回def
:SELECT value FROM table WHERE id = 1
3.什么都不返回:SELECT value FROM table WHERE id = 2
4.返回abc
:SELECT value FROM table WHERE id = 'a'
问题:为什么查询4会返回abc
?它应该没有结果吗?
答案 0 :(得分:3)
MySQL在数字上下文中静默地将字符串转换为数字。
通过转换前导数字字符(例如数字,减号和小数点)来实现。
如果没有数字,则停止。所以:
where id = 'a'
被解释为:
where id = 0
道德:永远不要在数字常量周围使用单引号 - 或者应该是数字的常量。