需要修改数据库、表、字段编码格式为utf8mb4
1.修改表字符集
ALTER table usr_user charset=utf8mb4;
2.修改字段字符集
ALTER table usr_user modify nick_name varchar(100) character set utf8mb4 collate utf8mb4_general_ci comment ‘姓名’;
3.代码中连接池增加
@Bean(destroyMethod="close",initMethod="init")
@ConfigurationProperties(prefix="spring.datasource")
publicDataSourcedataSource(){
DruidDataSourcedataSource=newDruidDataSource();
dataSource.setPasswordCallback(dbPasswordCallback());
//支持表情
StringTokenizertokenizer=newStringTokenizer("SET NAMES utf8mb4",";");
dataSource.setConnectionInitSqls(Collections.list(tokenizer));//重点设置该参数
return dataSource;
}
或者在配置文件配置此属性(还需看使用什么类型的连接池):
连接池为hikari
# 接收emoji表情
spring:
datasource:
hikari:
connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci
或者是这个样子的(tomcat)
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://*.*.*.*:3306/dbname?useUnicode=true&characterEncoding=utf-8
username: username
password: password
tomcat:
init-s-q-l: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci
又或者是这样的(连接池是druid)
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
url: jdbc:p6spy:mysql://***/***?autoReconnect=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
username: ***
password: ***
druid:
connection-init-sqls: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci
4.修改数据库字符集
看了很多文章都是在mysql服务器修改my.cnf中的字符集配置,然后重启mysql
配值如下
[client]
default-character-set=utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
skip-character-set-client-handshake = true
[mysql]
default-character-set = utf8mb4
其中character-set-server 和 collation-server 这些设置为utf8mb4字符集是比较容易理解的,就是将MySQL数据库相关的字符集都设置为utf8mb4;
但为了实现客户端utf8连接到MySQL后,使用的也是utf8mb4字符集,就在 mysqld配置中配置了 init_connect=‘SET NAMES utf8mb4’ 表示初始化连接都设置为utf8mb4字符集,再配置一个 skip-character-set-client-handshake = true 忽略客户端字符集设置,不论客户端是何种字符集,都按照init_connect中的设置进行使用,这样就满足了应用的需求。
这些参数在my.cnf配置好后,重启mysql实例让设置生效,应用人员经过各种测试后,确认满足字符集要求,各方面正常。
也可以使用Navicat,直接使用编辑功能修改编码格式