MySQL整数比较忽略尾随字母字符

时间:2011-04-07 01:14:57

标签: mysql

所以我只想说我有一个只有ID的表是一个int。我发现跑步:

SELECT *
FROM table 
WHERE ID = '32anystring';

返回id = 32的行。显然是32!='32anystring'。

这似乎很奇怪。为什么这样做?可以关掉吗?什么是最好的解决方法?

2 个答案:

答案 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. 当您处理或比较两种不同类型时,其中一种将转换为另一种类型。
  2. 字符串 - >数字的MySQL转换(你可以做'1.23def' * 2 => 2.46)尽可能多地解析字符串,只要它仍然是有效数字。如果第一个字母不能是数字的一部分,则结果为0