将逗号分隔的字符串与数字进行比较时MySQL的奇怪行为

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)

Sal*_*n A 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
Run Code Online (Sandbox Code Playgroud)

此处记录了该行为(在您的示例中,这是最后一条规则):

...

如果其中一个参数是十进制值,则比较取决于另一个参数.如果另一个参数是十进制或整数值,则将参数作为十进制值进行比较,如果另一个参数是浮点值,则将参数作为浮点值进行比较.

在所有其他情况下,参数被比较为浮点(实数).