mysql數據庫存儲emoji表情字符解決方案

最近在做微信端 web 程序開發,IOS端用戶在輸入時可能輸入 emoji 字符,由於 utf8的 mysql 數據庫並不支持存儲這種字符,會報Incorrect string value: ‘\xF0\x9F\x98\x97\xF0\x9F…’ 的類似錯誤
第一眼看到這個錯誤首先想到的解決方案爲 java 端編碼存儲於解碼輸出,只需要在可能出現這種錯誤的地方使用如下代碼即可解決這個問題
編碼:StringEscapeUtils.escapeJava(content) 編碼之後的數據可以正常存儲數據庫
解碼:StringEscapeUtils.unescapeJava(content) 解碼之後的數據在客戶端也可以正常查看
但這種解決方案會是的數據庫字段擴大很多倍,後來在網上尋找解決方案時,看到主要有如下兩種解決方案
第一種,過濾掉 emoji 字符,但這種解決方案如果 emoji 字符有更新還需要再修正代碼,因此比較好的解決方案是直接規定只能使用哪些字符(中英文,數字,特殊符號等等)而不是去考慮過濾特定字符,具體使用正則表達式匹配即可
第二種,更改 mysql 數據庫編碼格式使用 utf8mb4 編碼,使得 mysql 直接能存儲 emoji 格式字符,推薦使用這種方法來解決這個問題,具體解決方案如下:
1.mysql 版本必須高於5.5.3
2.修改 mysql 數據庫配置文件使得默認字符集爲 utf8mb4 格式:

[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

3.database 需要制定編碼格式爲 utf8mb4, collation爲utf8mb4_unicode_ci
表格與字段也需要這樣設置
4.jdbc 連接驅動版本需要特定版本,推薦使用5.1.41

發佈了52 篇原創文章 · 獲贊 32 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章