我在使用MySQL时遇到一些奇怪的行为。基本上我有一个这样的表:
ID string
1 14
2 10,14,25
此查询为什么要提取ID 2?
SELECT * FROM exampletable where string = 10
当然应该在寻找完全匹配的内容,因为这只会提取ID 1:
SELECT * FROM exampletable where string = 14
我知道FIND_IN_SET
,我觉得奇怪的是,第一个查询甚至没有提取任何内容。其行为类似于以下查询:
SELECT * FROM exampletable where string LIKE '10%'
答案 0 :(得分:5)
当您比较数字和字符串值时,MySQL将尝试将字符串转换为数字并匹配。 也会解析数字之类的字符串 。我们有:
SELECT '10,14,25' = 1 -- 0
SELECT '10,14,25' = 10 -- 1
SELECT 'FOOBAR' = 1 -- 0
SELECT 'FOOBAR' = 0 -- 1
SELECT '123.456' = 123 -- 0
SELECT '123.456FOOBAR' = 123.456 -- 1
行为是documented here(在您的示例中,这是最后一条规则):
...
如果参数之一是十进制值,则比较取决于 其他论点。如果参数是十进制值比较 其他参数是十进制或整数值,或作为浮点数 如果另一个参数是浮点值,则返回值。
在所有其他情况下,将参数作为浮点进行比较 (真实)数字。