兩種方式解決數據庫存入emoji報錯:Incorrect string value: ´\xF0\x9F\xA4\xA3\xE3\x80...´ for column xxx

問題描述

往數據庫裏存入emoji表情的時候報了一個錯: Incorrect string value: '\xF0\x9F\xA4\xA3\xE3\x80...' for column 'content' at row 1

原因

數據庫使用的是utf-8編碼格式 此時默認是使用3個字節爲一個單位進行編碼
而emoji表情是4個字節一個單位進行編碼的
因此 這個需要4字節才能表示的emoji表情(準確說是Unicode字符)會被截斷 從而導致存不進去 報錯

解決方法

解決方法一

①、設置數據庫默認字符集爲utf8mb4
ALTER DATABASE 庫名 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
②、設置數據表的字符集爲utf8mb4
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
③、修改數據庫連接地址

去掉地址的useUnicode=true&characterEncoding=utf-8

比如 我的地址爲:
jdbc:mysql://000.000.000.000:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
那麼我改成jdbc:mysql://000.000.000.000:3306/demo?useSSL=true&serverTimezone=UTC即可

解決方法二

通過第三方jar包進行轉換

導入:

<dependency>
	<groupId>com.github.binarywang</groupId>
	<artifactId>java-emoji-converter</artifactId>
	<version>0.1.1</version>
</dependency>

在代碼中進行轉換:

private EmojiConverter emojiConverter = EmojiConverter.getInstance();
emojiConverter.toAlias(內容);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章