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'
abc
SELECT value FROM table WHERE id = 0
def
SELECT value FROM table WHERE id = 1
SELECT value FROM table WHERE id = 2
SELECT value FROM table WHERE id = 'a'
问题: 为什么查询4返回abc?应该没有结果吧?
MySQL在数字上下文中无提示地将字符串转换为数字。
它通过转换前导数字字符(例如数字,减号和小数点)来实现。
如果没有数字,它将停止。所以:
where id = 'a'
被解释为:
where id = 0
道德:永远不要在数字常量(或应为数字的常量)周围使用单引号。