utf8mb4不生效的问题
Mysql数据库设置的编码utf8,某个表字段中要插入emoji内容,报 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x88' for column 'message_content' at row 1。在网上搜了一圈,基本上都是先修改数据库服务器的配置文件,再修改数据库,再修改表,再修改字段,全都设置为utf8mb4,这样把不需要utf8mb4编码的字段也会都改成utf8mb4,比如下图这样。
原本我只想改message_content字段,最终所有varchar字段都变成了utf8mb4。
最要命的还要重启数据库,自己测试还好,重启生产库就大事件了
其实真正的只要两步:
1)修改数据库字段:
ALTER TABLE `oa_t_user_favorite_message` MODIFY COLUMN `message_content` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '消息内容' ;
2)java中数据库驱动器设置编码
我项目基于spring boot,用的是druid数据源,可以参考:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
最终我的配置如下
spring:
application:
name: xxx
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
name: test
url: jdbc:mysql://xxx.xxx.xxx:3306/xxx?useUnicode=true&characterEncoding=UTF8&allowMultiQueries=true
username: xxx
password: xxx
driver-class-name: com.mysql.jdbc.Driver
connection-init-sqls: set names utf8mb4 #要设置这个才生效