Joh*_*sen 2 mysql sql string comparison numbers
我在使用MySQL时遇到了一些奇怪的行为.基本上我有这样一个表:
ID string
1 14
2 10,14,25
Run Code Online (Sandbox Code Playgroud)
为什么这个查询会拉出id 2?
SELECT * FROM exampletable where string = 10
Run Code Online (Sandbox Code Playgroud)
当然它应该寻找完全匹配,因为这只会拉出id 1:
SELECT * FROM exampletable where string = 14
Run Code Online (Sandbox Code Playgroud)
我知道FIND_IN_SET,我发现奇怪的是第一个查询甚至没有任何东西.它的行为类似于这个查询:
SELECT * FROM exampletable where string LIKE '10%'
Run Code Online (Sandbox Code Playgroud)
当您比较数字和字符串值时,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
Run Code Online (Sandbox Code Playgroud)
此处记录了该行为(在您的示例中,这是最后一条规则):
...
如果其中一个参数是十进制值,则比较取决于另一个参数.如果另一个参数是十进制或整数值,则将参数作为十进制值进行比较,如果另一个参数是浮点值,则将参数作为浮点值进行比较.
在所有其他情况下,参数被比较为浮点(实数).