JDBC连接mysql处理中文时乱码的一种解决办法

13 篇文章 0 订阅
3 篇文章 0 订阅

近日,整合的项目需要跟一个比较老版本的mysql服务器连接,使用navicat查看,发现此mysql服务器貌似没有设置默认编码,而且从操作此mysql的部分php文件看,应该是使用的gb2312的编码,但是,直接使用jdbc操作,从库中读取出来的中文全都是乱码。

一开始,使用类似entity.setDepartName(new String(rs.getString("hg").getBytes("gbk"), "utf-8"));的方式,试图进行强制的编码转换,结果失败了,因为,无论采用何种方式,转出来的字符总是各种各样的乱码,只是每次乱的方式都不一样。比较郁闷。而且,此项目由于使用的其他的产品,无法在其中再加额外的类似过滤器之类的东西,所以这个问题不是很好处理。

使用navicat连接查询,没有问题,因此,试着将某个表导出sql,查看DDL中是否有关于编码的设置,结果让我很失望,编码这一块直接没写。于是,将导出的sql文件修改扩展名为html,使用IE打开,发现没有乱码,查看此时的编码格式果然是“gb2312”,但是,使用java强制的转码已无济于事。怎么办呢?

而且,此项目已运行多年,后期维护有些缺乏,my.ini文件也更是无法查看并修改的。

突然想起,mysql连接的时候可以加上参数,并且有些参数是指定编码的,这样是不是可以解决问题呢?

于是修改连接字符串(原值为:url="jdbc:mysql://192.168.18.254:3306/web_oa)为:

url="jdbc:mysql://192.168.18.254:3306/web_oa?useUnicode=true&characterEncoding=gbk"

重启应用,查看,OK!中文很正常。

问题解决。

这种方式其实是在连接时指定使用gbk的编码格式,从而避免客户端与服务端各自使用自己默认的编码格式交互,只要配置合适,不会出现乱码问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值