带有数字/字符串的查询中的mysql返回意外结果

时间:2017-11-03 03:30:07

标签: mysql

字段cookingMethodvarchar。当我传递数字参数:in(3,4)为什么我得到这个结果?

SELECT distinct(cookingMethod) FROM recipe where cookingMethod in(3, 4);

结果:[3][3,5][3,4][4][4,5]

enter image description here

如果我使用('3','4'),结果只有'3','4'

SELECT distinct(cookingMethod) FROM recipe where cookingMethod in('3', '4')

结果:[3][4]

1 个答案:

答案 0 :(得分:1)

您的第二个查询很简单,并返回预期的结果,因为您正在将字符串与字符串进行比较。

但是,在第一个查询中,您使用数字与字符串进行比较。 MySQL隐式尝试将字段的值转换为数字以执行比较(其他数据库可能只是抛出错误)。但是,由于该字段同时包含数字和逗号,因此对于此查询,MySQL会将其视为带有逗号分隔数字列表的BLOBIN运算符将搜索以逗号分隔的列表,因此它会匹配其逗号分隔的数字列表中包含34的每个字段。