utf8mb4排序規則
在MySQL中常見的utf8mb4排序規則有:
- utf8mb4_0900_ai_ci
- utf8mb4_unicode_ci
- utf8mb4_general_ci
當設置表的默認字符集為utf8mb4字符集但未明確指定排序規則時:
- 在MySQL 5.7版本中,默認排序規則為utf8mb4_general_ci。
- 在MySQL 8.0版本中,默認排序規則為utf8mb4_0900_ai_ci。
由於utf8mb4_0900_ai_ci排序規則時MySQL 8.0引入的排序規則,因此將MySQL 8.0版本的表導入到MySQL 5.7或MySQL 5.6版本時,會存在字符集無法識別的問題。
[Err] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'
參數控制
在MySQL 5.6版本中,參數collation_server用於設置服務器級別的默認排序規則。
- 如果服務啟動時未指定參數collation_database的值,則默認繼承參數collation_server的值。
- 如果創建數據庫時未指定排序規則,則默認使用參數collation_database的值。
參數character_set_database和collation_database在MySQL 5.7版本中被遺棄並將在后續版本中移除。
MySQL新增參數default_collation_for_utf8mb4用於控制使用utf8mb4字符集時的默認排序規則,取值為utf8mb4_0900_ai_ci或utf8mb4_general_ci
參數default_collation_for_utf8mb4在下列條件中生效:
- 使用SHOW COLLATION and SHOW CHARACTER SET 命令時。
- 在創建庫或修改庫指定utf8mb4但未指定編碼規則時。
- 在創建表或修改表指定utf8mb4但未指定編碼規則時。
- 在增加列或修改列指定utf8mb4但未指定編碼規則時。
- 其他使用utf8mb4但未指定編碼規則時。
utf8mb4_unicode_ci和utf8mb4_general_ci對比
1、准確性
- utf8mb4_unicode_ci排序規則基於標准unicode進行排序和比較,能處理特殊的字符,能在各種語音中精確排序。
- utf8mb4_general_ci排序規則沒有基於標准unicode,無法處理部分特殊字符。
2、性能
- utf8mb4_general_ci排序規則在排序性能上相對較好
- utf8mb4_unicode_ci排序規則為處理特殊字符實現復雜的排序算法,性能略差
- 在大部分場景下,兩者沒有明顯的性能差異