首页IT科技mysql排序命令(MySQL常用排序规则utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_bin、utf8mb4_0900_ai_ci和存储字符集 utf8 和 utf8mb4)

mysql排序命令(MySQL常用排序规则utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_bin、utf8mb4_0900_ai_ci和存储字符集 utf8 和 utf8mb4)

时间2025-07-30 22:06:19分类IT科技浏览5053
导读:在创建数据库时,我们经常会需要填写数据库名、字符集、排序规则;...

在创建数据库时              ,我们经常会需要填写数据库名              、字符集                     、排序规则;

而本文主要讲述常用的存储字符集 utf8 和 utf8mb4;排序字符集 utf8mb4_unicode_ci 和 utf8mb4_general_ci        、utf8mb4_bin           、utf8mb4_0900_ai_ci

一般我本人创建创建数据库通常排序规则都使用utf8mb4_general_ci                     ,因为对特殊字符的顺序并不需要那么精确

1                    、存储字符集 utf8 和 utf8mb4

utf8 是 Mysql 中的一种字符集        ,只支持最长三个字节的 UTF-8 字符           ,也就是 Unicode 中的基本多文本平面              。 要在 Mysql 中保存 4 字节长度的 UTF-8 字符                    ,需要使用 utf8mb4 字符集            ,但只有 5.5.3 版本以后的才支持                     。我觉得        ,为了获取更好的兼容性                    ,应该总是使用 utf8mb4 而非 utf8. 对于 CHAR 类型数据                ,utf8mb4 会多消耗一些空间    ,根据 Mysql 官方建议                    ,使用 VARCHAR 替代 CHAR        。

总结

UTF-8是使用1~4个字节                   ,一种变长的编码格式,字符编码           。mb4即 most bytes 4                 ,使用4个字节来表示完整的UTF-8                    。

mysql的 utf8 编码最大字符长度为 3 字节                      ,如果遇到 4 字节的宽字符就会插入异常了            。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff    ,也就是 Unicode 中的基本多文种平面(BMP)        。也就是说              ,任何不在基本多文本平面的 Unicode字符                     ,都无法使用 Mysql 的 utf8 字符集存储                    。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码        ,常见于 ios 和 android 手机上)           ,和很多不常用的汉字                    ,以及任何新增的 Unicode 字符等等                。

MySQL的utf8是utfmb3            ,只有三个字节        ,节省空间但不能表达全部的UTF-8    。所以推荐使用utf8mb4(是utf8的超集并完全兼容它                    ,能够用四个字节存储更多的字符                ,这几乎包含了世界上所有能看到见的语言                    。)                   。

2            、排序字符集 utf8mb4_unicode_ci 和 utf8mb4_general_ci        、utf8mb4_bin                    、utf8mb4_0900_ai_ci

MySQL常用排序规则utf8mb4_general_ci                、utf8mb4_unicode_ci    、utf8mb4_bin

ci即case insensitive    ,不区分大小写。

utf8mb4_unicode_ci

是基于标准的Unicode来排序和比较                    ,能够在各种语言之间精确排序                   ,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法                 。

utf8mb4_general_ci

是一个遗留的 校对规则                 ,不支持扩展                      ,它仅能够在字符之间进行逐个比较                      。utf8_general_ci校对规则进行的比较速度很快    ,但是与使用 utf8mb4_unicode_ci的校对规则相比              ,比较正确性较差    。

utf8mb4_bin

将字符串每个字符用二进制数据编译存储                     ,区分大小写        ,而且可以存二进制的内容              。

utf8mb4_0900_ai_ci

MySQL 8.0 默认的是 utf8mb4_0900_ai_ci           ,属于 utf8mb4_unicode_ci 中的一种                    ,具体含义如下:

uft8mb4 表示用 UTF-8 编码方案            ,每个字符最多占 4 个字节                     。

0900 指的是 Unicode 校对算法版本        。(Unicode 归类算法是用于比较符合 Unicode 标准要求的两个 Unicode 字符串的方法)           。

ai 指的是口音不敏感                    。也就是说        ,排序时 e                    ,è                ,é    ,ê 和 ë 之间没有区别            。

ci 表示不区分大小写        。也就是说                    ,排序时 p 和 P 之间没有区别                    。

utf8mb4 已成为默认字符集                   ,在 MySQL 8.0.1 及更高版本中将 utf8mb4_0900_ai_ci 作为默认排序规则                。以前,utf8mb4_general_ci 是默认排序规则    。由于 utf8mb4_0900_ai_ci 排序规则现在是默认排序规则                 ,因此默认情况下新表格可以存储基本多语言平面之外的字符                    。现在可以默认存储表情符号                   。如果需要重音灵敏度和区分大小写                      ,则可以使用 utf8mb4_0900_as_cs 代替。

2.1                    、经常使用的 utf8mb4_unicode_ci 和 utf8mb4_general_ci 的区别

1                   、准确性

utf8mb4_unicode_ci 是基于标准的 Unicode 来排序和比较    ,能够在各种语言之间精确排序

utf8mb4_general_ci 没有实现 Unicode 排序规则              ,在遇到某些特殊语言或者字符集                     ,排序结果可能不一致                 。

但是绝大多数情况下        ,这些特殊字符的顺序并不需要那么精确                      。

2、性能

utf8mb4_general_ci 在比较和排序的时候更快

utf8mb4_unicode_ci 在特殊情况下           ,Unicode 排序规则为了能够处理特殊字符的情况                    ,实现了略微复杂的排序算法    。

但是在绝大多数情况下            ,不会发生此类复杂比较              。相比选择哪一种 collation        ,使用者更应该关心字符集与排序规则在 db 里需要统一                     。

推荐用 utf8mb4_unicode_ci                    ,但是用 utf8mb4_general_ci 也没啥问题.

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
vue this.$t(vue 中使用 this 更新数据的一次大坑) 网站优化的思路(网站优化策略分析)