V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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
huisunan
V2EX  ›  MySQL

Mysql 查询,字符串的前部分命中数字类型查询

  •  
  •   huisunan · 316 天前 · 805 次点击
    这是一个创建于 316 天前的主题,其中的信息可能已经有所发展或是发生改变。

    pCMwtpD.jpg

    pCMwaXd.jpg

    有大佬在知道这是什么情况吗

    4 条回复    2023-06-16 14:04:05 +08:00
    LeegoYih
        1
    LeegoYih  
       316 天前   ❤️ 1
    https://stackoverflow.com/questions/51544716/mysql-where-clause-accepting-integer-with-strings-on-primary-key-field
    简单的说就是字段是 int 而参数是 str ,MySQL 会自作聪明取前面整数部分。
    xianlinYI
        2
    xianlinYI  
       316 天前
    mysql 在你使用字符串类型的数据和数字类型的数据做比较时,会自动把所有数据转位数字类型的数据然后比较。分两种情况:
    第一种是你的列是数字类型,查询条件是字符串类型,这种情况转化的时候就丢失掉了字母部分,也就是你现在的情况;
    第二种情况是你的列是字符串类型,你的查询条件是数字类型,这种情况就会把你的列做一次函数操作转化成数字类型,和你的查询条件做比较,由此造成的问题就是你该列上的索引会失效;

    所以你在设计表和设计查询条件是需要考虑 mysql 的数据类型以防止索引失效
    huisunan
        3
    huisunan  
    OP
       316 天前
    @LeegoYih 明白了
    huisunan
        4
    huisunan  
    OP
       316 天前
    @xianlinYI 明白了,谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2753 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 15:22 · PVG 23:22 · LAX 08:22 · JFK 11:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.