mysql - utf8mb4_unicode_ci - utf8mb4_bin




utf8_general_ci和utf8_unicode_ci有什麼區別 (4)

utf8_general_ciutf8_unicode_ci ,在性能方面有什麼區別嗎?


這篇文章很好地描述了它。

簡而言之:utf8_unicode_ci使用Unicode標準中定義的Unicode排序算法,而utf8_general_ci是更簡單的排序順序,這會導致“不太精確”的排序結果。


簡言之:

如果你需要更好的排序順序 - 使用utf8_unicode_ci (這是首選的方法),

但如果你對性能完全感興趣 - 使用utf8_general_ci ,但知道它有點過時。

性能方面的差異非常小。


請參閱mysql手冊中的Unicode字符集部分:

對於任何Unicode字符集,使用_general_ci排序規則執行的操作比_unicode_ci排序規則更快。 例如,比較utf8_general_ci排序比較比utf8_unicode_ci更快,但稍微不准確。 原因是utf8_unicode_ci支持擴展等映射。 也就是說,當一個字符比較與其他字符的組合相等時。 例如,在德語和其他一些語言中,“ß”等於“ss”。 utf8_unicode_ci也支持縮寫和可忽略的字符。 utf8_general_ci是不支持擴展,縮小或可忽略字符的傳統歸類。 它只能進行字符之間的一對一比較。

總結一下,utf_general_ci使用比utf_unicode_ci更小,更不正確(根據標準)的比較集,而utf_unicode_ci 應該實現整個標準。 general_ci集合會更快,因為計算量更少。


這兩個歸類都是用於UTF-8字符編碼的。 差異在於文本如何排序和比較。

注意:由於MySQL 5.5.3,你應該使用utf8mb4而不是utf8 它們都引用UTF-8編碼,但較早的utf8具有MySQL特有的限制,防止使用大於0xFFFD的字符。

  • 準確性

    utf8mb4_unicode_ci基於用於排序和比較的Unicode標準,可以在各種語言中精確排序。

    utf8mb4_general_ci無法實現所有Unicode排序規則,這會在某些情況下導致不合需要的排序,例如在使用特定語言或字符時。

  • 性能

    utf8mb4_general_ci在比較和排序上更快,因為它需要一些與性能相關的快捷方式。

    在現代服務器上,這種性能提升將幾乎可以忽略不計。 它是在服務器具有當今計算機CPU性能的一小部分的時候設計的。

    utf8mb4_unicode_ci使用Unicode規則進行排序和比較,它採用相當複雜的算法,可以在各種語言和使用各種特殊字符時進行正確的排序。 這些規則需要考慮到特定於語言的慣例; 不是每個人都按照我們所說的“按字母排序”排序他們的角色。

就拉丁語(即“歐洲”)語言而言,在Unicode中排序和簡化的utf8mb4_general_ci排序在MySQL中沒有太大區別,但仍有一些差異:

  • 例如,Unicode排序規則將“ß”類似“ss”和“Œ”類似於“OE”,因為使用這些字符的人通常會想要,而utf8mb4_general_ci它們分類為單個字符(可能分別為“s”和“e” )。

  • 某些Unicode字符被定義為可忽略的,這意味著它們不應該計入排序順序,而應該將比較移動到下一個字符。 utf8mb4_unicode_ci正確處理這些。

在非拉丁語言中,例如亞洲語言或具有不同字母表的語言,Unicode排序和簡化的utf8mb4_general_ci排序之間可能存在更多差異。 utf8mb4_general_ci的適用性在utf8mb4_general_ci取決於所使用的語言。 對於某些語言來說,它會相當不足。

你應該使用什麼?

幾乎肯定沒有理由再使用utf8mb4_general_ci了,因為我們已經留下了CPU速度足夠低以至於性能差異很重要的點。 你的數據庫幾乎肯定會受到其他瓶頸的限制。

只有在極端特殊的情況下才能衡量性能的差異,如果這就是你,你可能已經知道了。 如果您的排序速度很慢,幾乎在所有情況下,您的索引/查詢計劃都會出現問題。 更改您的排序規則功能不應該排在要排除故障的列表中。

過去,有些人建議使用utf8mb4_general_ci除非準確的排序要足夠重要以證明性能成本。 如今,性能成本幾乎消失,開發人員正在更加嚴肅地對待國際化。

我要補充的另一件事是,即使您知道您的應用程序僅支持英語,但仍可能需要處理人們的姓名,這些姓名通常可能包含其他語言中使用的字符,這些字符對於正確排序同樣重要。 對所有內容使用Unicode規則有助於讓人放心,非常聰明的Unicode人員已經非常努力地進行分類工作。





unicode