mysql5 的一个 in 关键字使用的疑惑

253 天前
 Dlin
select * from esign_contract where task_item_id in ('1635,1636')

这个 sql 为什么能且只能匹配出 task_item_id = 1635 的记录。按我理解'1635,1636'是一个完整的字符串,不应该匹配出 1635 的记录。另外如果 in 关键字会对字符串中有',' (尝试了使用中文逗号,或符号,空格都会有这个效果)做拆分的话,那么也应该匹配出 1636 的结果,但是并没有匹配出来 1636 的结果

版本是 5.7.38-220701-log

1059 次点击
所在节点    MySQL
7 条回复
cheng6563
253 天前
你 task_item_id 是不是数字类型。。。
Dlin
253 天前
@cheng6563 是的
hidemyself
253 天前
我猜,应该是自动类型转换了。
'1635,1636' 被转换成了 1635
setsunakute
253 天前
对于你这种场景,你应该用 find_in_set ,而不是 in
liprais
253 天前
@Dlin 人家都告诉你了,你猜'1635,1636'转成数字类型出来的是啥
8355
253 天前
mysql 隐式转换
https://dev.mysql.com/doc/refman/8.0/en/type-conversion.html
SELECT CAST('78,55' AS UNSIGNED)
task_item_id 是 int 类型
传入的是字符串类型所以会将字符串转为 int
Dlin
253 天前
@hidemyself
@setsunakute
@liprais
@8355
好的明白了,感谢解疑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/969168

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX