zoukankan      html  css  js  c++  java
  • MySQL--utf8mb4排序规则

    utf8mb4排序规则

    在MySQL中常见的utf8mb4排序规则有:

    • utf8mb4_0900_ai_ci
    • utf8mb4_unicode_ci
    • utf8mb4_general_ci

    当设置表的默认字符集为utf8mb4字符集但未明确指定排序规则时:

    • 在MySQL 5.7版本中,默认排序规则为utf8mb4_general_ci。
    • 在MySQL 8.0版本中,默认排序规则为utf8mb4_0900_ai_ci。

    由于utf8mb4_0900_ai_ci排序规则时MySQL 8.0引入的排序规则,因此将MySQL 8.0版本的表导入到MySQL 5.7或MySQL 5.6版本时,会存在字符集无法识别的问题。

    [Err] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'
    

    参数控制

    在MySQL 5.6版本中,参数collation_server用于设置服务器级别的默认排序规则。

    • 如果服务启动时未指定参数collation_database的值,则默认继承参数collation_server的值。
    • 如果创建数据库时未指定排序规则,则默认使用参数collation_database的值。

    参数character_set_database和collation_database在MySQL 5.7版本中被遗弃并将在后续版本中移除。
    MySQL新增参数default_collation_for_utf8mb4用于控制使用utf8mb4字符集时的默认排序规则,取值为utf8mb4_0900_ai_ci或utf8mb4_general_ci
    参数default_collation_for_utf8mb4在下列条件中生效:

    • 使用SHOW COLLATION and SHOW CHARACTER SET 命令时。
    • 在创建库或修改库指定utf8mb4但未指定编码规则时。
    • 在创建表或修改表指定utf8mb4但未指定编码规则时。
    • 在增加列或修改列指定utf8mb4但未指定编码规则时。
    • 其他使用utf8mb4但未指定编码规则时。

    utf8mb4_unicode_ci和utf8mb4_general_ci对比

    1、准确性

    • utf8mb4_unicode_ci排序规则基于标准unicode进行排序和比较,能处理特殊的字符,能在各种语音中精确排序。
    • utf8mb4_general_ci排序规则没有基于标准unicode,无法处理部分特殊字符。

    2、性能

    • utf8mb4_general_ci排序规则在排序性能上相对较好
    • utf8mb4_unicode_ci排序规则为处理特殊字符实现复杂的排序算法,性能略差
    • 在大部分场景下,两者没有明显的性能差异
  • 相关阅读:
    【BUG】java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone
    IntelliJ IDEA控制台输出中文乱码问题
    CMD命令
    MongoDB学习笔记
    MyBatis生成序列ID
    MongoDB配置问题
    正确处理下载文件时HTTP头的编码问题(Content-Disposition)
    SpringJPA主键生成采用自定义ID,自定义ID采用年月日时间格式
    Java根据经纬度算出附近正方形的四个角的经纬度
    gradle
  • 原文地址:https://www.cnblogs.com/gaogao67/p/14721829.html
Copyright © 2011-2022 走看看