解决Springboot JPA + mysql 无法添加emoji问题
程序员文章站
2022-03-02 14:57:55
...
假设你数据库用的是utf-8编码,在没有解决emoji编码之前,会报类似以下错误:
Incorrect string value: '\xF0\x9F\x98\xAC' for column 'user_name'
其原因是因为utf8无法保存emoji表情。在写解决办法之前先补充一下utf8mb4的概念:
什么事utf8mb4?utf8mb4它是utf8的超集并兼容utf8的所有字符集,其中mb4表示most bytes
4,就是说字符编码可以用1~4个字节去编码。
用utf8mb4的原因:
在mysql中utf8只支持字符长度最大为3个字节的字符,而emoji是长度为4个字节的字符,因此,普通的utf8编码不能满足emoji的要求,这时就需要用到utf8mb4编码。(提示:utf8mb4要求mysql版本在5.5.3以上)
下面进入正题,如何解决题目中emoji问题:
第一步,修改对应字段编码,将其改为utf8mb4编码
修改字段编码:ALTER TABLE table_name CHANGE column_name column_name VARCHAR(255) CHARACTER SET utf8mb4 NULL DEFAULT NULL;
附上可能需要用到的其他操作:
修改数据库编码:SET character_set_database = utf8mb4; 或
alter database db_name character set utf8mb4
修改数据表编码:ALTER TABLE db_name CHARACTER SET = utf8mb4;
查看数据库编码:SHOW CREATE DATABASE db_name;
查看表编码:SHOW CREATE TABLE tb_name;
查看字段编码:SHOW FULL COLUMNS FROM col_name;
完成了第一步,你就可以通过mysql手动插入emoji数据,但是通过Springboot插入数据还是会报错,这时就需要下面这步:
第二步修改tomcat的sql插入编码,修改yml文件:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
username: root
password: '123456'
tomcat:
init-s-q-l: SET NAMES utf8mb4 //这是最重要的一步
完成上述两步,就可以通过JPA插入emoji了,开森!
上一篇: row number分頁存儲過程
下一篇: JPA @Lob映射Mysql乱码问题