【发布时间】:2011-04-07 01:14:56
【问题描述】:
所以假设我有一个只有一个 ID 的表是一个 int。我发现正在运行:
SELECT *
FROM table
WHERE ID = '32anystring';
返回 id = 32 的行。显然是 32 != '32anystring'。
这看起来很奇怪。为什么这样做?可以关闭吗?最好的解决方法是什么?
【问题讨论】:
标签: mysql
所以假设我有一个只有一个 ID 的表是一个 int。我发现正在运行:
SELECT *
FROM table
WHERE ID = '32anystring';
返回 id = 32 的行。显然是 32 != '32anystring'。
这看起来很奇怪。为什么这样做?可以关闭吗?最好的解决方法是什么?
【问题讨论】:
标签: mysql
在将字符串转换为数字时,将前导数字解释为数字是大多数编程语言的常见行为。
有几种方法可以解决这个问题:
使用准备好的语句,并定义要放置数值类型的占位符。这将完全防止将字符串放入其中。
在应用程序的更高层检查以验证输入并确保它是数字的。
在 mysql 中使用 BINARY 关键字(我只是猜测这会起作用,从未实际尝试过,因为我总是在运行查询之前实现了一个适当的验证系统) -
SELECT *
FROM table
WHERE BINARY ID = '32anystring';
【讨论】:
你需要阅读这篇文章
http://dev.mysql.com/doc/refman/5.1/en/type-conversion.html
'1.23def' * 2 => 2.46)尽可能多地解析字符串,只要它仍然是一个有效的数字。如果第一个字母不能是数字的一部分,则结果为 0【讨论】: