項目中需要在mysql中存儲包含emoji表情的字段,使用utf8編碼無法解決,因為mysql的utf8實作隻有3位元組。
為此mysql在5.3+後加入了utf8mb4支援,完全相容utf8。utf8mb4最多可用4位元組存儲一個字元,這樣就可以處理emoji表情,注意mysql服務端的版本要求
utf8mb4的最低mysql版本支援版本為5.5.3+
後來參考了另一篇文章MySQL 解決 emoji表情 的方法,使用utf8mb4 字元集(4位元組 UTF-8 Unicode 編碼),将表的編碼改為utf8mb4,将mysql url連接配接串裡characterEncoding=UTF-8去掉,改為
jdbc:mysql://ali-burst:3306/liebian?serverTimezone=Asia/Shanghai&useUnicode=true
這樣資料是插入了,沒有報錯,但是确是亂碼。花了好長時間研究,說是在用戶端連接配接池中設定spring.datasource.init-sql之類的,試了好多,沒用。
嘗試在
mysql指令行用戶端
手動插入emoji
set names utf8mb4;
insert into test values('��a漢��');
select * from test;
表情成功插入,說明mysql服務端是沒問題的
那肯定是應用程式的問題了
排查了好久,上面那個連結仔細看了好幾遍,突然注意到版本問題。可能
不僅要求服務端要在5.5.3以上,對JDBC驅動也有版本要求
。檢查pom裡mysql驅動版本,5.1.6,真TM坑。
mysql java驅動版本改為
5.1.41
後,成功插入,無亂碼