mysql的utf8mb4編碼以及java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' 問題的處理
阿新 • • 發佈:2018-12-26
最近在做一次資料轉移(postgresql轉移到mysql)的時候,發現會出現如下錯誤:
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1
這是字符集不支援的異常。
新舊資料庫都使用的是utf8編碼,utf8最大的一個特點,就是它是一種變長的編碼方式,它可以使用1~4個位元組表示一個符號,根據不同的符號而變化位元組長度。其中Emoji表情和一些生僻字是4個位元組,而MySql的utf8編碼最多3個位元組,所以導致了資料插不進去報錯。
解決辦法是將資料庫的編碼從utf8修改為utf8mb4.
解決方法(mysql支援的最低版本為5.5.3)
1.docker啟動的mysql服務
docker啟動的服務就很簡單,只需要在run的時候在後面加入引數:–character-set-server=utf8mb4 –collation-server=utf8mb4_unicode_ci ,就可以讓docker裡面的預設字元變成utf8mb4。
2.正常的mysql服務
1)版本檢查
mysql -v
2).更改配置檔案
修改mysql的配置檔案/etc/mysql/my.cnf, 新增如下內容:
[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)重啟資料庫
service mysql restart
4)檢查編碼格式
1.進入msyql
mysql -uroot -p
2.執行檢視編碼命令
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';