美文网首页mysql
MySQL查询大小写不敏感

MySQL查询大小写不敏感

作者: HachiLin | 来源:发表于2023-12-31 15:14 被阅读0次

    1、问题背景

    在某一次需求中,测试同学提出了以下疑问:为何数据库存储的是hgb,但是实际使用HGB落库的时候,其实会报异常!


    image.png

    2、mysql中的charset和collate

    2.1 charset

    简介
    CHARSET 用于设置字符集,字符集是用于编码字符的规则集。常用的字符集包括 utf8 和 utf8mb4,分别用于编码普通的文本和包含Emoji等特殊字符的文本。
    常用字符集及占用的字节数
    使用如下命令可以查看mysql支持的字符集:

    SHOW CHARACTER SET;
    
    image.png

    2.2 collate

    简介
    mysql的排序规则,数据库中涉及字符类型(varchar、char、text)的排序,比较(order by、where中的大小比较)都和collate有关。
    排序规则遵循原则
    (1)以_ci(表示大小写不敏感)
    (2)以_cs(表示大小写敏感)
    (3)以_bin(表示用编码值进行比较)

    3、查询大小写不敏感的表结构

    image.png

    3.1 MySQL的默认字符集

    image.png

    4、如何实现mysql查询大小写是敏感的

    4.1 在查询sql中加入binary关键字

    image.png

    4.2 在创建表的时候进行限制

    • 方法1
    `user_code` varchar(32) BINARY NOT NULL COMMENT '用户代码'
    
    • 方法2
    CREATE TABLE `user` (
      `user_id` varchar(32) NOT NULL COMMENT '主键',
      `user_code` varchar(32) NOT NULL COMMENT '用户代码, 全小写',
      ......
      PRIMARY KEY (`user_id`) USING BTREE,
      UNIQUE KEY `uk_system_code_user_code` (`system_code`,`user_code`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户表'
    

    5、其它注意事项

    (1)数据库名和表名是严格区分大小写的;
    (2)表的列名是严格区分大小写的;
    (3)列名与列的别名在所有的情况下均是忽略大小写的;
    (4)字段内容默认情况下是大小写不敏感的;

    相关文章

      网友评论

        本文标题:MySQL查询大小写不敏感

        本文链接:https://www.haomeiwen.com/subject/qvlyndtx.html