問題描述
往數據庫裏存入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(內容);