所以我只想说我有一个只有ID的表是一个int。我发现跑步:
SELECT *
FROM table
WHERE ID = '32anystring';
返回id = 32的行。显然是32!='32anystring'。
这似乎很奇怪。为什么这样做?可以关掉吗?什么是最好的解决方法?答案 0 :(得分:2)
在将字符串转换为数字时,将前导数字解释为数字是大多数编程语言中的常见行为。
有几种方法可以解决这个问题:
使用预准备语句,并定义将值设置为数字类型的占位符。这样可以防止字符串被放在那里。
检查应用程序的更高层以验证输入并确保它是数字。
在mysql中使用BINARY关键字(我只是猜测这会起作用,从来没有真正尝试过,因为我在运行查询之前总是只实现了一个合适的验证系统) -
SELECT *
FROM table
WHERE BINARY ID = '32anystring';
答案 1 :(得分:1)
你需要阅读这个
http://dev.mysql.com/doc/refman/5.1/en/type-conversion.html
'1.23def' * 2
=> 2.46)尽可能多地解析字符串,只要它仍然是有效数字。如果第一个字母不能是数字的一部分,则结果为0