我在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%'
1条答案
按热度按时间ojsjcaue1#
当您比较一个数字和一个字符串值时,mysql将尝试将字符串转换为数字并匹配。类似数字的字符串也会被解析。我们有:
行为记录在这里(在您的示例中,这是最后一条规则):
...
如果其中一个参数是十进制值,则比较取决于另一个参数。如果另一个参数是十进制或整数值,则将参数作为十进制值进行比较;如果另一个参数是浮点值,则将参数作为浮点值进行比较。
在所有其他情况下,参数作为浮点数(实数)进行比较。