mysql中的utf8mb4、utf8mb4_unicode_ci、utf8mb4_general_ci

AmyZYX發表於2018-09-06

1.utf8與utf8mb4(utf8 most bytes 4)

  • MySQL 5.5.3之後增加了utfmb4字元編碼
  • 支援BMP(Basic Multilingual Plane,基本多文種平面)和補充字元
  • 最多使用四個位元組儲存字元

utf8mb4是utf8的超集並完全相容utf8,能夠用四個位元組儲存更多的字元。

標準的UTF-8字符集編碼是可以使用1-4個位元組去編碼21位字元,這幾乎包含了世界上所有能看見的語言。
MySQL裡面實現的utf8最長使用3個字元,包含了大多數字符但並不是所有。例如emoji和一些不常用的漢字,如“墅”,這些需要四個位元組才能編碼的就不支援。

2.字符集、連線字符集、排序字符集

utf8mb4對應的排序字符集有utf8mb4_unicode_ci、utf8mb4_general_ci.

utf8mb4_unicode_ci和utf8mb4_general_ci的對比:

  • 準確性:
    • utf8mb4_unicode_ci是基於標準的Unicode來排序和比較,能夠在各種語言之間精確排序
    • utf8mb4_general_ci沒有實現Unicode排序規則,在遇到某些特殊語言或者字符集,排序結果可能不一致。
    • 但是,在絕大多數情況下,這些特殊字元的順序並不需要那麼精確。
  • 效能
    • utf8mb4_general_ci在比較和排序的時候更快
    • utf8mb4_unicode_ci在特殊情況下,Unicode排序規則為了能夠處理特殊字元的情況,實現了略微複雜的排序演算法。
    • 但是在絕大多數情況下發,不會發生此類複雜比較。相比選擇哪一種collation,使用者更應該關心字符集與排序規則在db裡需要統一。

相關文章