utf8mb4不生效的问题

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 #要设置这个才生效

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值