Mysql的utf8與utf8mb4區別,utf8mb4_bin、utf8mb4_general_ci、utf8mb4_unicode_ci區別


UTF-8是使用1~4個字節,一種變長的編碼格式,字符編碼。mb4即 most bytes 4,使用4個字節來表示完整的UTF-8。

mysql的 utf8 編碼最大字符長度為 3 字節,如果遇到 4 字節的寬字符就會插入異常了。三個字節的 UTF-8 最大能編碼的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文種平面(BMP)。也就是說,任何不在基本多文本平面的 Unicode字符,都無法使用 Mysql 的 utf8 字符集存儲。包括 Emoji 表情(Emoji 是一種特殊的 Unicode 編碼,常見於 ios 和 android 手機上),和很多不常用的漢字,以及任何新增的 Unicode 字符等等。

總結:MySQL的utf8是utfmb3,只有三個字節,節省空間但不能表達全部的UTF-8。所以推薦使用utf8mb4。

utf8mb4_bin:將字符串每個字符用二進制數據編譯存儲,區分大小寫,而且可以存二進制的內容。

utf8mb4_general_ci:ci即case insensitive,不區分大小寫。沒有實現Unicode排序規則,在遇到某些特殊語言或者字符集,排序結果可能不一致。但是,在絕大多數情況下,這些特殊字符的順序並不需要那么精確。

utf8mb4_unicode_ci:是基於標准的Unicode來排序和比較,能夠在各種語言之間精確排序,Unicode排序規則為了能夠處理特殊字符的情況,實現了略微復雜的排序算法。

utf8mb4_general_ci是一個遺留的 校對規則,不支持擴展,它僅能夠在字符之間進行逐個比較。utf8_general_ci校對規則進行的比較速度很快,但是與使用 utf8mb4_unicode_ci的校對規則相比,比較正確性較差。

總結:general_ci 更快,unicode_ci 更准確。但相比現在的CPU來說,它遠遠不足以成為考慮性能的因素,索引涉及、SQL設計才是。使用者更應該關心字符集與排序規則在db里需要統一。(可能產生亂碼的字段不要作為主鍵或唯一索引。例如:以 url 來作為唯一索引,但是它記錄的有可能是亂碼。)
————————————————
版權聲明:本文為CSDN博主「yzh_1346983557」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yzh_1346983557/article/details/89643071


免責聲明!

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



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