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

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

未知排序规则:utf8mb4_0900_ai_ci

简介

在 MySQL 8.0.0 版本中引入了新的排序规则 utf8mb4_0900_ai_ci,它是基于 Unicode Collation Algorithm (UCA) 和 Common Locale Data Repository (CLDR) 的一种排序规则。它的主要特点是能够更好地处理 Unicode 字符,例如支持基于注音或拼音的中文排序、支持德语字符的排序。

但是,由于它是一个相对较新的排序规则,与旧的排序规则不兼容,因此可能会导致一些应用程序在升级到 MySQL 8.0.0 版本之后出现问题。

影响

如果您的应用程序在升级到 MySQL 8.0.0 版本后出现了以下异常,请考虑是否与新的排序规则有关:

  • 数据库无法创建
  • 表无法创建
  • 查询结果与预期不同
  • 排序出错

如果发现出现以上问题,建议您检查应用程序中是否有与排序规则相关的代码,例如排序、索引等。

解决方案
  • 如果您的应用程序需要使用 utf8mb4_0900_ai_ci 排序规则,请确保数据库、表、字段等全部使用 utf8mb4_0900_ai_ci 排序规则。
  • 如果您的应用程序依赖旧的排序规则,可以在 MySQL 中将默认排序规则设置为旧的排序规则。
  • 如果您的应用程序中有与排序规则相关的代码,可以将其修改为与 utf8mb4_0900_ai_ci 排序规则兼容的代码。
示例代码

设置默认排序规则为旧的排序规则:

SET GLOBAL collation_server='utf8mb4_general_ci';
SET collation_database=DEFAULT;
SET collation_connection=DEFAULT;

将表的排序规则修改为 utf8mb4_0900_ai_ci:

ALTER TABLE my_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

将字段的排序规则修改为 utf8mb4_0900_ai_ci:

ALTER TABLE my_table MODIFY COLUMN my_column VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;