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