_048_SpringBoot_Spring-Boot+Druid连接Mysql兼容utf8mb4

转发,感谢作者的无私分享 

问题背景:非常见中文汉字存入mysql库
报错信息:Cause: java.sql.SQLException: Incorrect string value: 'xF0xA8xB3x92x0Ap...' for column 'request' at row 1
pom信息如下:

<!-- 数据源 start -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>
<!-- 数据源 end -->

问题很明显,因为mysql库一般都是utf-8的字符集,只支持3字节的中文汉字,而特殊的中文汉字是用四字节存储的,所以首先要把你的数据库表的格式设置正确,修改语句如下:

ALTER TABLE 你的表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE 你的表名 CHANGE 字段名 VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

修改完成后,我们就可以处理代码层面的问题了,

=============画重点,敲黑板!!!==============

我们需要在初始化druid数据源时,添加下面的配置,以保证连接mysql时,客户端的字符集被指定为utf8mb4

public DataSource getDataSource() throws Exception {
        Properties props = new Properties();
        props.put("driverClassName", "com.mysql.jdbc.Driver");
        props.put("url", "你的jdbc连接串");
        props.put("username", "你的用户名");
        props.put("password", "你的密码");
        props.put("initConnectionSqls", "set names utf8mb4;");
        return DruidDataSourceFactory.createDataSource(props);
}

initConnectionSqls这个配置项一定要写对,网上很多的教程写的都是connectionInitSqls,在比较新的druid版本是不认这个参数的,具体原因可以参加下方源码的截图。

clipboard.png

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值