我发现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会返回结果?如果有办法让搜索严格吗?
答案 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 = 1
将seller_key
与数值进行比较。