MySQL 的 utf8_general_ci 和 utf8_unicode_ci 有什么區別,應如何選擇?


一般的解說是 utf8_general_ci 速度較快,utf8_unicode_ci 准確性較好 … 但快在那里,又好在什么地方呢?

首先就其准確性說,這世界上有無數種文字,除了通用的英文使用我們較熟悉的 A-Z 字符外,還有很多種近似的寫法用於法文、德文、俄文等等…

光是一個 A 字就有數十種不同表現
為什么不都用同一種 A 呢,幾十種多麻煩啊。事實上,它們在所屬的文字上都各有意義,可能代表不同的發音,也可能是其他東西。在某些語言上,同一個單詞不同發音可能就代表兩個意思。

 

校對規則

utf8_unicode_ci 及 utf8_general_ci 的用途就是對那些看起來不一樣的字符進行轉換,令我們進行排序比對時更方便准確。

以下面為例,直接看起來是不相等的,但在實際應用上是成立的,這就是 utf8_unicode_ci 及 utf8_general_ci 工作的結果。
Ä = A

Ö = O
Ü = U

而 utf8_unicode_ci 准確性較好就表現在它有更完整的字元對照表上,它甚至可以將一個特別字符轉換成多於一個英文字符,以德文中的 s 例:

在 utf8_unicode_ci 下面等式是成立
ß = ss

在 utf8_general_ci 只有這樣才成立
ß = s

 

排序規則

因為 utf8_unicode_ci 有更完整字符表及轉換規則,所以在排序的准確性上也比 utf8_general_ci 高一些。

utf8_general_ci 字符表的一部份

utf8_unicode_ci 有更完整的字符表

 

效能

同樣因為 utf8_unicode_ci 的字符表及轉換規則更復雜,所以在效能上比 utf8_general_ci 慢。

 

總結

如果你的應用是德文、俄文等等,或者需要精確處理國際化的內容,請用 utf8_unicode_ci 。
否則的話用 utf8_general_ci 就可以了。

 

備注

雖然說 utf8_unicode_ci 的字集比較完整,但其實還是不全的,所以 MySQL 還提供了很多種其他語言的專用字集,用於特別的本地應用,詳細可以看看下面的官網連結

 

參考

MySQL 官方解說: http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM