在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版本时,会存在字符集无法识别的问题。
utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8 字符.MySQL的“utf8”实际上不是真正的UTF-8。 “utf8”只支持每个字符最多三个字节,而真正的UTF-8是每个字符最多四个字节。可以说MySQL的“utf8”是一种“专属的编码”,它能够编码的Unicode字符并不多。
2010年发布了一个叫作“utf8mb4”的字符集, MySQL在5.5.3之后增加了这个utf8mb4的编码, mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。常见的emoji
在这个字符集中也被支持了. 就像这样 😊 !
常用的排序规则有: utf8mb4_general_ci 、 utf8mb4_bin 、 utf8mb4_unicode_ci
utf8mb4_0900_ai_ci
MySQL 8.0 默认的排序规则 ,属于 utf8mb4_unicode_ci 中的一种.
- uft8mb4 表示用 UTF-8 编码方案,每个字符最多占4个字节。
- 0900 指的是 Unicode 校对算法版本,代表Unicode 9.0的规范。(Unicode归类算法是用于比较符合Unicode标准要求的两个Unicode字符串的方法)。
- ai(accent insensitive )指的是口音不敏感,不区分重音。也就是说,排序时e,è,é,ê和ë之间没有区别。与之对应的是as(accent sensitive) 区分重音
- ci(case insensitive)表示不区分大小写。也就是说,排序时p和P之间没有区别。与之对应的是cs(case sensitive )区分大小写
utf8mb4_unicode_ci
准确性: utf8mb4_unicode_ci 是基于标准的 Unicode 来排序和比较,能够在各种语言之间精确排序 性能: utf8mb4_unicode_ci 在特殊情况下,Unicode 排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。
utf8mb4_general_ci
准确性: utf8mb4_general_ci 没有实现 Unicode 排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。 性能: utf8mb4_general_ci 在比较和排序的时候更快
utf8mb4_bin
*_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的, 将字符串每个字符用二进制数据编译存储,区分大小写,而且可以存二进制的内容。
utf8_unicode_ci
比较准确, utf8_general_ci
速度比较快。通常情况下, 新建数据库时一般选用 utf8_general_ci
就可以了