Springboot项目:mysql不支持存储表情符号的解决方法(druid连接池)

Springboot项目:mysql不支持存储表情符号的解决方法(druid连接池)


原因
mysql数据库的默认字符集utf8,只能存储3个字节的数据,标准的emoji表情是4个字节,所以要使用utf8mb4兼容四个字节。

解决方法

  1. 修改数据库的字符集
    先查看数据库的字符集属性,输入:

    show variables like '%character%';
    

    出现结果如图所示:
    mysql character属性
    将utf8改成uftmb4:

    set character_set_client = utf8mb4;
    set character_set_server = utf8mb4;
    set character_set_connection = utf8mb4;
    set character_set_database = utf8mb4;
    set character_set_results = utf8mb4;
    set collation_connection = utf8mb4_general_ci;
    set collation_database = utf8mb4_general_ci;
    set collation_server = utf8mb4_general_ci;
    
  2. 修改含有表情符号的字段编码类型为utf8mb4

    ALTER TABLE `表名` MODIFY COLUMN `字段名`  varchar(255) CHARACTER SET utf8mb4 NULL DEFAULT NULL COMMENT '注释';
    
  3. 修改对应的表的数据集

    ALTER TABLE `表名` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
    
  4. 更改数据库连接池配置
    1)直接在数据源的xml文件中设置连接初始化语句set names utf8mb4,以下是druid连接池的配置:

    <property name="connectionInitSqls" value="set names utf8mb4;"/>
    

    2)若为自己编写的数据源类,则进行如下配置:

    以我的项目为例:在DruidProperties.java(数据源配置类)中添加成员变量connectionInitSqls以及其setter getter函数,并在配置函数config()中添加dataSource.setConnectionInitSqls(Arrays.asList(connectionInitSqls));

    private String[] connectionInitSqls;
    
    public String[] getConnectionInitSqls() {
        return connectionInitSqls;
    }
    
    public void setConnectionInitSqls(String[] connectionInitSqls) {
        this.connectionInitSqls = connectionInitSqls;
    }
    
    public void config(DruidDataSource dataSource) {
    	...
        dataSource.setConnectionInitSqls(Arrays.asList(connectionInitSqls));
    	...
    }
    

    最后在配置文件application.yml中添加connection-init-sqls: set names utf8mb4,如图最后一行所示:application.yml

注意:jdbc url连接参数characterEncoding=utf-8不变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值