› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
Dlin
V2EX  ›  MySQL

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

  •  
  •   Dlin · Aug 29, 2023 · 2652 views
    This topic created in 1126 days ago, the information mentioned may be changed or developed.
    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

    7 replies  •  2023-08-29 13:59:21 +08:00
    cheng6563
        1
    cheng6563  
       Aug 29, 2023
    你 task_item_id 是不是数字类型。。。
    Dlin
        2
    Dlin  
    OP
       Aug 29, 2023
    @cheng6563 是的
    hidemyself
        3
    hidemyself  
       Aug 29, 2023
    我猜,应该是自动类型转换了。
    '1635,1636' 被转换成了 1635
    setsunakute
        4
    setsunakute  
       Aug 29, 2023
    对于你这种场景,你应该用 find_in_set ,而不是 in
    F281M6Dh8DXpD1g2
        5
    F281M6Dh8DXpD1g2  
       Aug 29, 2023
    @Dlin 人家都告诉你了,你猜'1635,1636'转成数字类型出来的是啥
    8355
        6
    8355  
       Aug 29, 2023
    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
        7
    Dlin  
    OP
       Aug 29, 2023
    @hidemyself
    @setsunakute
    @liprais
    @8355
    好的明白了,感谢解疑
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3180 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 04:52 · PVG 12:52 · LAX 21:52 · JFK 00:52
    ♥ Do have faith in what you're doing.