MySQL 8 中的 utf8mb4_0900_ai_ci 排序规则混淆

MySQL 8 中的 utf8mb4_0900_ai_ci 排序规则混淆

💡 原文英文,约1500词,阅读约需6分钟。
📝

内容提要

在MySQL 8中,尽管设置为utf8mb4_general_ci,默认排序规则为utf8mb4_0900_ai_ci。建议使用ALTER DATABASE命令更新数据库排序规则,以确保新建表使用正确的排序规则。utf8mb4_general_ci适合一般应用,而utf8mb4_0900_ai_ci支持更复杂的字符处理。

🎯

关键要点

  • 在MySQL 8中,默认排序规则为utf8mb4_0900_ai_ci,即使设置为utf8mb4_general_ci。
  • 建议使用ALTER DATABASE命令更新数据库排序规则,以确保新建表使用正确的排序规则。
  • utf8mb4_general_ci适合一般应用,而utf8mb4_0900_ai_ci支持更复杂的字符处理。
  • 创建数据库时,如果未明确指定字符集和排序规则,将继承服务器的默认值。
  • 使用SET PERSIST命令更改default_collation_for_utf8mb4是被弃用的做法,未来版本将变为只读。
  • utf8mb4_general_ci与utf8mb4_0900_ai_ci的比较显示,前者适合一般用途,后者适合现代应用和国际化需求。
  • 在创建表时,如果需要,可以明确指定排序规则以避免混淆。

延伸问答

为什么在MySQL 8中即使设置为utf8mb4_general_ci,默认排序规则仍然是utf8mb4_0900_ai_ci?

在MySQL 8中,默认排序规则为utf8mb4_0900_ai_ci,即使设置为utf8mb4_general_ci,这是因为default_collation_for_utf8mb4仍然配置为utf8mb4_0900_ai_ci。

如何更新MySQL数据库的排序规则以使用utf8mb4_general_ci?

可以使用ALTER DATABASE命令更新数据库的排序规则,例如:ALTER DATABASE <dbname> COLLATE utf8mb4_general_ci。

utf8mb4_general_ci和utf8mb4_0900_ai_ci有什么区别?

utf8mb4_general_ci适合一般用途,处理速度较快,而utf8mb4_0900_ai_ci支持更复杂的字符处理和国际化需求,适合现代应用。

在创建新表时,如何确保使用正确的排序规则?

在创建新表时,可以明确指定排序规则,例如:CREATE TABLE <table_name> (columns...) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci。

为什么SET PERSIST命令更改default_collation_for_utf8mb4被弃用?

SET PERSIST命令被弃用是因为default_collation_for_utf8mb4是为MySQL复制内部使用而设计的,未来版本将变为只读。

如何检查当前MySQL服务器的字符集和排序规则?

可以使用SHOW VARIABLES LIKE '%character%'和SHOW VARIABLES LIKE '%collat%'命令来检查当前的字符集和排序规则。

➡️

继续阅读