• 售前

  • 售后

热门帖子
入门百科

MySQL中utf8mb4排序规则示例

[复制链接]
xinting_6ym 显示全部楼层 发表于 2021-8-14 14:41:48 |阅读模式 打印 上一主题 下一主题
在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版本时,会存在字符集无法辨认的题目。
  1. [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与等值查询测试


测试脚本
  1. ## 删除测试表
  2. DROP TABLE IF EXISTS tb2001;
  3. DROP TABLE IF EXISTS tb2002;
  4. DROP TABLE IF EXISTS tb2003;
  5. ## 创建测试表
  6. CREATE TABLE tb2001(
  7. id INT AUTO_INCREMENT PRIMARY KEY,
  8. c1 VARCHAR(100) COLLATE utf8mb4_unicode_ci,
  9. c2 VARCHAR(100) COLLATE utf8mb4_bin
  10. )ENGINE=INNODB DEFAULT CHARSET=utf8mb4 ;
  11. CREATE TABLE tb2002(
  12. id INT AUTO_INCREMENT PRIMARY KEY,
  13. c1 VARCHAR(100) COLLATE utf8mb4_general_ci,
  14. c2 VARCHAR(100) COLLATE utf8mb4_bin
  15. )ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
  16. CREATE TABLE tb2003(
  17. id INT AUTO_INCREMENT PRIMARY KEY,
  18. c1 VARCHAR(100) COLLATE utf8mb4_0900_ai_ci,
  19. c2 VARCHAR(100) COLLATE utf8mb4_bin
  20. )ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
  21. ## 插入测试数据
  22. INSERT INTO tb2001(c1,c2)VALUES(0xF09F8D83,0xF09F8D83),(0xF09FA68A,0xF09FA68A),(0xF09F8CA0,0xF09F8CA0);
  23. INSERT INTO tb2002(c1,c2)VALUES(0xF09F8D83,0xF09F8D83),(0xF09FA68A,0xF09FA68A),(0xF09F8CA0,0xF09F8CA0);
  24. INSERT INTO tb2003(c1,c2)VALUES(0xF09F8D83,0xF09F8D83),(0xF09FA68A,0xF09FA68A),(0xF09F8CA0,0xF09F8CA0);
  25. ## 等值查询测试
  26. SELECT * FROM tb2001 WHERE c1=0xF09F8D83;
  27. SELECT * FROM tb2002 WHERE c1=0xF09F8D83;
  28. SELECT * FROM tb2003 WHERE c1=0xF09F8D83;
  29. SELECT * FROM tb2001 WHERE c2=0xF09F8D83;
  30. SELECT * FROM tb2002 WHERE c2=0xF09F8D83;
  31. SELECT * FROM tb2003 WHERE c2=0xF09F8D83;
复制代码
测试结果

[code]mysql> SELECT * FROM tb2001 WHERE c1=0xF09F8D83;
+----+------+------+
| id | c1   | c2   |
+----+------+------+
|  1 |

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作