mysql排序规则utf8mb4_bin、utf8mb4_unicode_ci、utf8mb4_0900_ai_ci、utf8mb4_general_ci有何区别?

mysql8 mysql · ez · 于 1年前 发布 · 2543 次阅读

存储字符集 Encoding

属性名称CHARACTER SET

⚠️ 注意: 在MySQL中请使用utf8mb4, 永远不要使用utf8.

utf8

utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8 字符.

MySQL的“utf8”实际上不是真正的UTF-8。 “utf8”只支持每个字符最多三个字节,而真正的UTF-8是每个字符最多四个字节。可以说MySQL的“utf8”是一种“专属的编码”,它能够编码的Unicode字符并不多。

utf8mb4

2010年发布了一个叫作“utf8mb4”的字符集, 在MySQL在5.5.3之后增加了这个utf8mb4的编码, mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。

常见的emoji在这个字符集中也被支持了. 就像这样 😊 !

排序规则 Collation

属性名称COLLATE

字符除了需要存储,还需要排序或比较大小。

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,也就是说是区分大小写的, 将字符串每个字符用二进制数据编译存储,区分大小写,而且可以存二进制的内容。

本文由 ez 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。

共收到 0 条回复
没有找到数据。
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册