最近在用富文本emoji表情的存入数据库的时候一直遇到一个错误
error code [1366]; Incorrect string value: '\xF0\x9F\x98\x84<b...' for column 'productDescription' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x84<b...' for column 'productDescription' at row 1] with root cause
- 原因分析
数据库设置的字符格式(utf8)不支持emoji表情字符.只需要将数据的字符格式都设置为
utfmb84
即可.
Emoji表情是4个字节,而mysql的utf8编码最多3个字节,所以数据插不进去,而utf8mb4是支持四个字节的.所以解决方案就是:将mysql编码从utf8转换成utf8mb4.
- 解决方法
既然utf8不支持4个字节的存入,那直接把数据库修改成
utf8mb4
- 先修改数据库
我这边是直接修改的某张表的编码,不需要全部修改,可按需修改
# 修改数据库字符集:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# 修改表的字符集:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
2.修改Springboot配置文件
spring:
datasource:
hikari:
connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci
在插入表情的时候就不会报错了
网友评论