Emoji表情符號在MySQL數據庫中的存儲


在Android手機或者iPhone的各種輸入法鍵盤中,會自帶一些Emoji表情符號,如IPhone手機系統鍵盤包含的表情符號有:


IPhone Emoji.png

如果在移動端發布文本內容時包含了這種Emoji表情符號,通過接口傳遞到服務器端,服務器端再存入MySQL數據庫:

  • 對gbk 字符集的數據庫,寫入數據庫的數據,在回顯時,變成 ‘口口’ 無法回顯;

  • 對utf8 字符集的數據庫,則根本無法寫入數據庫,程序直接報出異常信息
    java.io.exception xxxxxxxx.

原因分析:

Emoji表情符號為4個字節的字符,而 utf8 字符集只支持1-3個字節的字符,導致無法寫入數據庫。

解決方案:

  1. 遍歷輸入的文本,把四字節長度的字符,修正為自定義的字符替換掉。

  2. 修改MySQL數據庫字符集, 把數據庫字符集從utf8 修改為支持1-4 個字節字符的utf8mb4。

事實上可以看出,第一種方案的工作量較大,並不可取。推薦使用第二種方案,修改數據庫字符集。從MySQL 5.5.3版本開始,數據庫可支持4個字節的utf8mb4 字符集,一個字符最多可以有4個字節,所以能支持更多的字符集,故能存儲Emoji表情符號。從 mysql 5.5.3 之后版本基本可以無縫升級到 utf8mb4 字符集。同時,utf8mb4兼容utf8字符集,utf8 字符的編碼、位置、存儲在utf8mb4與utf8字符集里一樣的,不會對有現有數據帶來損壞。

升級方案:

  1. 修改數據庫字符集character-set-server=utf8mb4 重啟數據庫生效。

  2. 修改database 的字符集為 utf8mb4 alter database dbname character set utf8mb4

  3. 修改表的字符集 為utf8mb4 , alter table character set = utf8mb4

附上:

Emoji 全編碼字符集:IOS Emoji



作者:亦楓
鏈接:http://www.jianshu.com/p/20740071d854
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

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



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