• MySQL学习笔记3:排序规则和排序规则的影响


    一、排序规则概念

    在mysql数据库中,排序规则是依赖字符集编码的,他们在mysql中经常是捆绑的存在。

    排序规则一般指对字符集中字符串之间的比较、排序制定的规则。一种字符集可以对应多种排序规则,但是一种排序规则只能对应指定的一种字符集,两个不同的字符集不能有相同的排序规则
    在这里插入图片描述
    上图中utf8mb4字符集对应多个排序规则。每种字符集都有一个默认的排序规则。比如上图中utf8mb4默认的排序规则就是utf8mb4_general_ci。

    排序规则和字符集一样,在实例,schema,表,字段级别都可以设置,优先级如下:
    字段>表>schema>实例

    也就是说,如果字段上设置了字符集和排序规则,那么就采用字段上的字符集和排序规则,如果没有设置就使用表的,如果表上也没有设置,那就是默认使用schema上的,如果schema上也没有设置,那么就使用实例上的字符集和排序规则。

    排序规则前缀是字符集编码,中间是排序规则名称,后缀有特殊意义如下(常用的):

    _ci : 不区分大小写, Case-insensitive的缩写
    
    _cs : 区分大小写,Case-sensitive的缩写
    
    _ai : 不区分重音,Accent-insensitive的缩写
    
    _as : 区分重音,Accent-sensitive的缩写
    
    _bin : 二进制
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    例:utf8mb4_general_ci这个排序规则中,utf8mb4是字符集编码,general是排序规则名称,ci意味着不区分大小写。

    二、排序规则的影响

    **排序规则最重要的影响就是如果多表关联查询时,如果表上关联的字段排序规则不一样,则无法进行关联查询。**会抛出如下错误:

    Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='
    
    • 1

    这个时候,必须要把关联字段的排序规则修改成一样才可以进行联合查询。
    第二个影响就是在对两个不同排序规则的字段进行字符串比较或者排序时会产生不同的结果。
    所以为了避免上述两种情况,需要在建表,建库时使用正确的字符集编码和排序规则。

  • 相关阅读:
    《模拟龙生》|500行Go代码写一个随机冒险游戏|巨龙修为挑战开启
    精美如蝴蝶结,Coredy iTag 防丢器支持苹果 Find My 功能
    UNet语义分割网络
    请求分页中的内存分配
    金九银十求职季,Java自动化面试题分享
    MybatisPlus中Enum的使用(MybatisEnumTypeHandler)及遇到的问题
    计算机毕业设计Python+Django的学生考勤管理系统(源码+系统+mysql数据库+Lw文档)
    Wireshark 用命令行分析数据包
    matlab导入txt数据
    MyBatis:配置文件
  • 原文地址:https://blog.csdn.net/hon_vin/article/details/127635022