Mysql字符集修改问题由utf8改为utf8mb4

7 篇文章 0 订阅
2 篇文章 0 订阅

一、问题原由:

由于原有的mysql表中的字段的字符集为utf8不能写入四个字符的文字,导致插入失败

在这里插入图片描述
在这里插入图片描述

二、解决方案:

由于这是公司项目中的问题,mysql相关的问题要找对应的DBA,dba修改了相应的字段后,

1、在数据库进行测试,确保mysql表中可以正常插入四个字节的字符
set names utf8mb4; 
use inbound; 
insert into ib_t_bp_master_inbound(bp_id, company_code) values(11,'𡘙師傅便當專賣店-北平店'); 

经测试,可以正常插入。
在这里插入图片描述

2、修改代码中mysql-connector-java的jar包,由原来的5.1.21升级到5.1.49,5中的最高版本。

这里首先看一下mysql官网文档对于使用的mysql驱动的说明:https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-charsets.html 对于驱动版本有明确要求。
在这里插入图片描述

可以针对自己使用的jar包的版本进行设置,为了方便使用,我直接将jar包升级到5.1.49.直接支持utf8mb4.

3、修改java链接mysql驱动版本

项目中使用的druid数据源配置上需要加上connectionInitSqls属性配置,具体如下:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    ....此处省略其他属性.....
    <property name="connectionInitSqls" value="set names utf8mb4;" />
</bean>

ps.但是我实际测试下来,这个参数不加也没有什么问题,可以正常保存这种特殊字符和emoji表情,官方建议配置。
数据库连接串配置
我们的配置如下:

jdbc.url=jdbc:mysql://ip:port/databaseName?useUnicode=true&characterEncoding=UTF-8&noAccessToProcedureBodies=true&autoReconnect=true

建议去掉useUnicode和characterEncoding的配置,使用如下配置:

jdbc.url=jdbc:mysql://ip:port/databaseName?noAccessToProcedureBodies=true&autoReconnect=true

ps.但是我实际测试下来,连接串上增加useUnicode=true&characterEncoding=utf8也没有什么问题,可以正常保存这种特殊字符和emoji表情。

参考资料:

https://ningyu1.github.io/site/post/81-mysql-utf8mb4/

https://www.cnblogs.com/silenceshining/p/12556131.html

https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-charsets.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值