我的表名students
uid | name
-----+-------
10 | John
11 | Smith
**数据类型:**
uid int(11)
name varchar(256)
我的查询:
SELECT name FROM students WHERE uid = '10'
返回:John
我的第二个问题:
SELECT name FROM students WHERE uid = '10someChar'
返回:John
为什么第二个查询返回John?
答案 0 :(得分:4)
uid列是整数,并且在where子句中传递的值首先被强制转换为整数...并且大多数整数转换算法只抓取它们可以在字符串中找到的第一组数字(并忽略任何内容)之后不匹配)...因此它找到10并忽略其余的
答案 1 :(得分:1)
MySQL会根据需要自动将数字转换为字符串,反之亦然。
也可以使用CAST()函数将数字转换为字符串。
读一读。
MySQL曾试图返回某些东西 - 即使它是错误的类型,他也会自动投射。
您应该在PHP中过滤以验证您的业务规则。
Postgresql应该抛出异常