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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章