字段cookingMethod
为varchar
。当我传递数字参数:in(3,4)
为什么我得到这个结果?
SELECT distinct(cookingMethod) FROM recipe where cookingMethod in(3, 4);
结果:[3][3,5][3,4][4][4,5]
如果我使用('3','4')
,结果只有'3','4'
?
SELECT distinct(cookingMethod) FROM recipe where cookingMethod in('3', '4')
结果:[3][4]
答案 0 :(得分:1)
您的第二个查询很简单,并返回预期的结果,因为您正在将字符串与字符串进行比较。
但是,在第一个查询中,您使用数字与字符串进行比较。 MySQL隐式尝试将字段的值转换为数字以执行比较(其他数据库可能只是抛出错误)。但是,由于该字段同时包含数字和逗号,因此对于此查询,MySQL会将其视为带有逗号分隔数字列表的BLOB
。 IN
运算符将搜索以逗号分隔的列表,因此它会匹配其逗号分隔的数字列表中包含3
或4
的每个字段。