mysql的utf8與utf8mb4 異同;utf8mb4_unicode_ci 與 utf8mb4_general_ci 如何選擇


 如圖,一般使用如下配置

utf8mb4是4個字節。utf8是3個字節。utf8mb4兼容性更好,占用空間更大。

 

主要從排序准確性和性能兩方面看:

  • 准確性
    utf8mb4_unicode_ci 是基於標准的Unicode來排序和比較,能夠在各種語言之間精確排序
    utf8mb4_general_ci 沒有實現Unicode排序規則,在遇到某些特殊語言或字符是,排序結果可能不是所期望的。
    但是在絕大多數情況下,這種特殊字符的順序一定要那么精確嗎。比如Unicode把ߌ當成ssOE來看;而general會把它們當成se,再如ÀÁÅåāă各自都與 A 相等。
  • 性能
    utf8mb4_general_ci 在比較和排序的時候更快
    utf8mb4_unicode_ci 在特殊情況下,Unicode排序規則為了能夠處理特殊字符的情況,實現了略微復雜的排序算法。
    但是在絕大多數情況下,不會發生此類復雜比較。general理論上比Unicode可能快些,但相比現在的CPU來說,它遠遠不足以成為考慮性能的因素,索引涉及、SQL設計才是。 我個人推薦是 utf8mb4_unicode_ci,將來 8.0 里也極有可能使用變為默認的規則。相比選擇哪一種collation,使用者應該更關心字符集與排序規則在db里要統一就好。

這也從另一個角度告訴我們,不要可能產生亂碼的字段作為主鍵或唯一索引。我遇到過一例,以 url 來作為唯一索引,但是它記錄的有可能是亂碼,導致后來想把它們修復就特別麻煩。

參考:

1、https://my.oschina.net/xsh1208/blog/1052781

2、http://seanlook.com/2016/10/23/mysql-utf8mb4/


免責聲明!

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



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