📌  相关文章
📜  未知排序规则:'utf8mb4_0900_ai_ci' drupal (1)

📅  最后修改于: 2023-12-03 15:26:32.183000             🧑  作者: Mango

未知排序规则:utf8mb4_0900_ai_ci

简介

utf8mb4_0900_ai_ci 是 MySQL 8.0.0 版本及之后版本中新增的一种排序规则。它主要用于支持 Unicode 码点大于 U+FFFF 的字符集,比如 Emoji 表情等。相比于 utf8mb4_general_ci,它能够更准确地进行字符串比较。

排序规则

utf8mb4_0900_ai_ci 的排序规则如下:

  1. 字符串比较时先进行一些基本处理,例如大写转小写、去掉空格等;
  2. 对于单字符和多字符的字符串,如果它们在 Unicode 编码中相等,则它们在排序时也被认为是相等的;
  3. 对于多字符的字符串,需要将其分为多个单字符的字符串进行比较;
  4. 在比较单字符和多字符的字符串时,会将单字符的字符串扩展成和多字符的字符串一样长,然后再进行比较;
  5. 字符串中包含数字时,会将数字当作一个整体进行比较,而不是按照 ASCII 码比较单个字符。
示例
SELECT '👧' = '👦🏻' COLLATE utf8mb4_0900_ai_ci; -- 0

SELECT 'A' = 'a' COLLATE utf8mb4_0900_ai_ci; -- 1

SELECT '00123' = '123' COLLATE utf8mb4_0900_ai_ci; -- 1

以上示例展示了 utf8mb4_0900_ai_ci 在比较 Emoji 表情、大小写和数字时的行为。

总结

utf8mb4_0900_ai_ci 是 MySQL 8.0.0 版本及之后版本中新增的一种排序规则,主要用于支持 Unicode 码点大于 U+FFFF 的字符集,比如 Emoji 表情等。它能够更准确地进行字符串比较,对于单字符和多字符的字符串,在 Unicode 编码中相等的字符串,会在排序时被认为是相等的。除此之外,它还能够处理字符串中的数字,将数字当作一个整体进行比较。