mysql比较逗号分隔字符串和数字时的奇怪行为

tjrkku2a  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(463)

我在mysql上遇到了一些奇怪的行为。基本上我有一张这样的table:

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%'
ojsjcaue

ojsjcaue1#

当您比较一个数字和一个字符串值时,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

行为记录在这里(在您的示例中,这是最后一条规则):
...
如果其中一个参数是十进制值,则比较取决于另一个参数。如果另一个参数是十进制或整数值,则将参数作为十进制值进行比较;如果另一个参数是浮点值,则将参数作为浮点值进行比较。
在所有其他情况下,参数作为浮点数(实数)进行比较。

相关问题