MySQL中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排序规则为处理特殊字符实现复杂的排序算法,性能略差
- 在大部分场景下,两者没有明显的性能差异
补:MySQL--utf8mb4与等值查询测试
测试脚本
## 删除测试表 DROP TABLE IF EXISTS tb2001; DROP TABLE IF EXISTS tb2002; DROP TABLE IF EXISTS tb2003; ## 创建测试表 CREATE TABLE tb2001( id INT AUTO_INCREMENT PRIMARY KEY, c1 VARCHAR(100) COLLATE utf8mb4_unicode_ci, c2 VARCHAR(100) COLLATE utf8mb4_bin )ENGINE=INNODB DEFAULT CHARSET=utf8mb4 ; CREATE TABLE tb2002( id INT AUTO_INCREMENT PRIMARY KEY, c1 VARCHAR(100) COLLATE utf8mb4_general_ci, c2 VARCHAR(100) COLLATE utf8mb4_bin )ENGINE=INNODB DEFAULT CHARSET=utf8mb4; CREATE TABLE tb2003( id INT AUTO_INCREMENT PRIMARY KEY, c1 VARCHAR(100) COLLATE utf8mb4_0900_ai_ci, c2 VARCHAR(100) COLLATE utf8mb4_bin )ENGINE=INNODB DEFAULT CHARSET=utf8mb4; ## 插入测试数据 INSERT INTO tb2001(c1,c2)VALUES(0xF09F8D83,0xF09F8D83),(0xF09FA68A,0xF09FA68A),(0xF09F8CA0,0xF09F8CA0); INSERT INTO tb2002(c1,c2)VALUES(0xF09F8D83,0xF09F8D83),(0xF09FA68A,0xF09FA68A),(0xF09F8CA0,0xF09F8CA0); INSERT INTO tb2003(c1,c2)VALUES(0xF09F8D83,0xF09F8D83),(0xF09FA68A,0xF09FA68A),(0xF09F8CA0,0xF09F8CA0); ## 等值查询测试 SELECT * FROM tb2001 WHERE c1=0xF09F8D83; SELECT * FROM tb2002 WHERE c1=0xF09F8D83; SELECT * FROM tb2003 WHERE c1=0xF09F8D83; SELECT * FROM tb2001 WHERE c2=0xF09F8D83; SELECT * FROM tb2002 WHERE c2=0xF09F8D83; SELECT * FROM tb2003 WHERE c2=0xF09F8D83;
上一篇:MySQL子查询中order by不生效问题的解决方法
栏 目:MySQL
本文标题:MySQL中utf8mb4排序规则示例
本文地址:https://idc91.com/shujuku/3473.html
您可能感兴趣的文章
- 05-31MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
- 05-31MySQL索引失效十种场景与优化方案
- 05-31MYSQL 高级文本查询之regexp_like和REGEXP详解
- 05-31MySQL获取binlog的开始时间和结束时间(最新方法)
- 05-31MySQL索引查询的具体使用
- 05-31基于MySQL和Redis扣减库存的实践
- 05-31关于MySQL的存储过程与存储函数
- 05-31MySQL实战文章(非常全的基础入门类教程)
- 05-31MySQL Flink Watermark实现事件时间处理的关键技术
- 05-31MySQL Flink实时流处理的核心技术之窗口机制
阅读排行
推荐教程
- 05-30Navicat for MySQL 11注册码激活码汇总
- 05-27Mysql误删数据快速恢复
- 05-31VS2022连接数据库MySQL并进行基本的表的操作指南
- 05-30解决seata不能使用mysql8版本的问题方法
- 05-30MYSQL字符集设置的方法详解(终端的字符集)
- 05-30解决MySQL启动报错:ERROR 2003 (HY000): Can't con
- 05-30关于Mysql-connector-java驱动版本问题总结
- 11-22mac下安装mysql忘记密码的修改方法
- 05-30MySQL中的隐藏列的具体查看
- 11-22mysql exists与not exists实例详解