Warning | 3719 | 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.


MySQL的“utf8”實際上不是真正的UTF-8。“utf8”只支持每個字符最多三個字節,而真正的UTF-8是每個字符最多四個字節。

MySQL一直沒有修復這個bug,他們在2010年發布了一個叫作“utf8mb4”的字符集,繞過了這個問題。

 

簡單概況:

  • MySQL的“utf8mb4”是真正的“UTF-8”。
  • MySQL的“utf8”是一種“專屬的編碼”,它能夠編碼的Unicode字符並不多。

 

 所有在使用“utf8”的MySQL和MariaDB用戶都應該改用“utf8mb4”,永遠都不要再使用“utf8”。

 

什么是編碼?什么是UTF-8?

我們都知道,計算機使用0和1來存儲文本。比如字符“C”被存成“01000011”,那么計算機在顯示這個字符時需要經過兩個步驟:

計算機讀取“01000011”,得到數字67,因為67被編碼成“01000011”。
計算機在Unicode字符集中查找67,找到了“C”。
同樣的:

我的電腦將“C”映射成Unicode字符集中的67。
我的電腦將67編碼成“01000011”,並發送給Web服務器。
幾乎所有的網絡應用都使用了Unicode字符集,因為沒有理由使用其他字符集。

Unicode字符集包含了上百萬個字符。最簡單的編碼是UTF-32,每個字符使用32位。這樣做最簡單,因為一直以來,計算機將32位視為數字,而計算機最在行的就是處理數字。但問題是,這樣太浪費空間了。

UTF-8可以節省空間,在UTF-8中,字符“C”只需要8位,一些不常用的字符,比如“”需要32位。其他的字符可能使用16位或24位。一篇類似本文這樣的文章,如果使用UTF-8編碼,占用的空間只有UTF-32的四分之一左右。

MySQL的“utf8”字符集與其他程序不兼容

 

總結

如果你在使用MySQL或MariaDB,不要用“utf8”編碼,改用“utf8mb4”。這里(https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4)提供了一個指南用於將現有數據庫的字符編碼從“utf8”轉成“utf8mb4”。

 

英文原文:https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434


原文鏈接:https://blog.csdn.net/cpongo2/article/details/89018239


免責聲明!

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



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