2011-04-07 127 views
1

所以我们只是说我有一个表,只有一个ID是一个整数。我发现运行:MySQL整数比较忽略尾随alpha字符

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

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

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

回答

2

在将字符串转换为数字时,在大多数编程语言中将常用行为解释为数字。

有一对夫妇的方式来处理这个问题:

使用准备好的声明,并定义你把值必须是数字型的占位符。这将防止字符串被放置在那里。

检查应用程序的更高层以验证输入并确保它是数字。

在MySQL中使用的BINARY关键字(我只是猜测,这会的工作,从来没有真正尝试过,因为我一直只是运行一个查询之前实施了适当的验证系统) -

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

您需要在您的工作在读这

http://dev.mysql.com/doc/refman/5.1/en/type-conversion.html

  1. ,或者比较两个不同类型的,他们中的一个将被转换为其他的。
  2. 字符串 - >数字的MySQL转换(您可以做'1.23def' * 2 => 2.46)尽可能地解析字符串,只要它仍然是一个有效的数字。如果第一个字母不能是数字的一部分,结果将变为0
+0

这稍微不正确(至少对于我的版本)。 SELECT'abc123def'* 2 => 0,如果你删除了前导字母,它确实有效。 – therealsix 2011-04-07 01:30:56

+0

@therealsix /谢谢。我认为它在第一块上工作。 – RichardTheKiwi 2011-04-07 01:32:49