一、MySQL端
原因:utf8不是utf-8,最多只支持3字节的字符,utf8mb4最多支持4个字节的字符,emoji表情是有四个字节的字符,所以存表情必须使用utf8mb4的字符集。
环境:小于mysql5.5.3的版本不支持utf8mb4
- 修改数据库字符集
ALTER DATABASE db_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
- 修改表字符集
ALTER TABLE table_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
二、mysql-connector-java
mysql-connector-java各版本对utf8mb4字符集的支持如下:
三、SpringBoot数据源配置
如果使用的时druid连接池:
spring.datasource.druid.connection-init-sqls=set names utf8mb4
如果使用的是springboot 2.x默认连接池:
spring.datasource.hikari.connection-init-sql=set names utf8mb4
注意:如果是多数据库记得放到具体数据库配置节点下
eg:
spring: ## 数据源设置 datasource: type: com.alibaba.druid.pool.xa.DruidXADataSource config-location: classpath:/mapper/mybatis-config.xml druid: #druid监控页面用户名和密码 user: admin password: admin web-stat-filter: enabled: true stat-view-servlet: enabled: true ## 连接池配置 coolcar-read: ## JDBC配置 name: master mapper-location: classpath:/mapper/read/**/*.xml driver-class-name: com.mysql.cj.jdbc.Driver filters: stat maxActive: 20 initialSize: 1 maxWait: 60000 minIdle: 1 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: select 'x' testWhileIdle: true testOnBorrow: true testOnReturn: true poolPreparedStatements: true maxOpenPreparedStatements: 20 connection-init-sqls: SET NAMES utf8mb4