MySQL中utf8mb4排序规则示例
MySQL中utf8mb4排序规则示例,博智网带你了解详细信息 。
在MySQL中常见的utf8mb4排序规则有:
- utf8mb4_0900_ai_ci
- utf8mb4_unicode_ci
- utf8mb4_general_ci
- 在MySQL 5.7版本中 , 默认排序规则为utf8mb4_general_ci 。
- 在MySQL 8.0版本中 , 默认排序规则为utf8mb4_0900_ai_ci 。
[Err] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'参数控制
在MySQL 5.6版本中 , 参数collation_server用于设置服务器级别的默认排序规则 。
- 如果服务启动时未指定参数collation_database的值 , 则默认继承参数collation_server的值 。
- 如果创建数据库时未指定排序规则 , 则默认使用参数collation_database的值 。
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但未指定编码规则时 。
1、准确性
- utf8mb4_unicode_ci排序规则基于标准unicode进行排序和比较 , 能处理特殊的字符 , 能在各种语音中精确排序 。
- utf8mb4_general_ci排序规则没有基于标准unicode , 无法处理部分特殊字符 。
- utf8mb4_general_ci排序规则在排序性能上相对较好
- utf8mb4_unicode_ci排序规则为处理特殊字符实现复杂的排序算法 , 性能略差
- 在大部分场景下 , 两者没有明显的性能差异
测试脚本
## 删除测试表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> SELECT * FROM tb2001 WHERE c1=0xF09F8D83;+----+------+------+| id | c1| c2|+----+------+------+|1 | 🍃| 🍃||2 | 🦊| 🦊||3 | 🌠| 🌠|+----+------+------+3 rows in set (0.00 sec)mysql> SELECT * FROM tb2002 WHERE c1=0xF09F8D83;+----+------+------+| id | c1| c2|+----+------+------+|1 | 🍃| 🍃||2 | 🦊| 🦊||3 | 🌠| 🌠|+----+------+------+3 rows in set (0.01 sec)mysql> SELECT * FROM tb2003 WHERE c1=0xF09F8D83;+----+------+------+| id | c1| c2|+----+------+------+|1 | 🍃| 🍃|+----+------+------+1 row in set (0.00 sec)mysql> mysql> SELECT * FROM tb2001 WHERE c2=0xF09F8D83;+----+------+------+| id | c1| c2|+----+------+------+|1 | 🍃| 🍃|+----+------+------+1 row in set (0.00 sec)mysql> SELECT * FROM tb2002 WHERE c2=0xF09F8D83;+----+------+------+| id | c1| c2|+----+------+------+|1 | 🍃| 🍃|+----+------+------+1 row in set (0.00 sec)mysql> SELECT * FROM tb2003 WHERE c2=0xF09F8D83;+----+------+------+| id | c1| c2|+----+------+------+|1 | 🍃| 🍃|+----+------+------+1 row in set (0.00 sec)
推荐阅读
- 12mis含义是什么
- 14点30分是什么时辰
- 12306的积分有什么用
- bios中fastboot要开吗
- cdr中要怎么进行居中对齐
- 中华鲟是保护动物吗
- 9岁身高有多高
- 中国有几大名山分别在哪里
- 圣经中麦基洗德是什么人
- 泰勒科学管理思想中对人的研究仅仅存在于什么的范畴
