MySQL在INT列上搜索返回错误的结果

时间:2010-09-10 11:36:54

标签: mysql

我发现MySQL在搜索INT列时会返回奇怪的结果。

A)

SELECT *
  FROM `sellers` 
 WHERE `seller_key` = '1' 

使用密钥1返回卖家。

b)中

SELECT * 
  FROM `sellers` 
 WHERE `seller_key` = '1sdjhksadhak' 

使用密钥1返回卖家。

c)中

SELECT * 
  FROM `sellers` 
 WHERE `seller_key` = '1adlksajdkj187987'

使用密钥1返回卖家。

d)

SELECT * 
  FROM `sellers` 
 WHERE `seller_key` = 'adlksajdkj187987' 

不返回任何内容。

为什么b和c会返回结果?如果有办法让搜索严格吗?

3 个答案:

答案 0 :(得分:3)

您正在对数字列进行比较。

为此,mySQL需要自动将字符串转换为数字。

转换过程使用从左侧开始可用于整数值的任何内容,并丢弃其他所有内容。

以下是突出显示行为的示例:

SELECT CAST( '1adlksajdkj187987' TO unsigned)

将返回1

最简单的解决方案是不使用引号:

SELECT *
  FROM `sellers` 
 WHERE `seller_key` = 1 

我想如果在traditional mode.

中运行,mySQL会在这里抛出错误

mySQL理论对那些感兴趣的人:

答案 1 :(得分:1)

这可能是因为您的seller_key列是数字类型。

因此,当您使用'1''1sdjhksadhak''1adlksajdkj187987'时,它们都会转换为数值 1

答案 2 :(得分:0)

seller_key是INT列,因此您应该使用:

SELECT * FROM sellers WHERE seller_key = 1seller_key与数值进行比较。