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

如果在移動端發布文本內容時包含了這種Emoji表情符號,通過接口傳遞到服務器端,服務器端再存入MySQL數據庫:
-
對gbk 字符集的數據庫,寫入數據庫的數據,在回顯時,變成 ‘口口’ 無法回顯;
-
對utf8 字符集的數據庫,則根本無法寫入數據庫,程序直接報出異常信息
java.io.exception xxxxxxxx.
原因分析:
Emoji表情符號為4個字節的字符,而 utf8 字符集只支持1-3個字節的字符,導致無法寫入數據庫。
解決方案:
-
遍歷輸入的文本,把四字節長度的字符,修正為自定義的字符替換掉。
-
修改MySQL數據庫字符集, 把數據庫字符集從utf8 修改為支持1-4 個字節字符的utf8mb4。
事實上可以看出,第一種方案的工作量較大,並不可取。推薦使用第二種方案,修改數據庫字符集。從MySQL 5.5.3版本開始,數據庫可支持4個字節的utf8mb4 字符集,一個字符最多可以有4個字節,所以能支持更多的字符集,故能存儲Emoji表情符號。從 mysql 5.5.3 之后版本基本可以無縫升級到 utf8mb4 字符集。同時,utf8mb4兼容utf8字符集,utf8 字符的編碼、位置、存儲在utf8mb4與utf8字符集里一樣的,不會對有現有數據帶來損壞。
升級方案:
-
修改數據庫字符集character-set-server=utf8mb4 重啟數據庫生效。
-
修改database 的字符集為 utf8mb4 alter database dbname character set utf8mb4
-
修改表的字符集 為utf8mb4 , alter table character set = utf8mb4
附上:
Emoji 全編碼字符集:IOS Emoji
作者:亦楓
鏈接:http://www.jianshu.com/p/20740071d854
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。