JDBC解决中文乱码问题

在JDBC库connector-j-3.0.7 里面的 readme, 找到一个解决方案:
connection = DriverManager.getConnection( "jdbc:mysql://localhost/test?user=root&password=&useUnicode=true&characterEncoding=GBK" );
这是告诉 jdbc driver 强制按指定参数转码


其实还是有问题。如果 mysql server 一定得用 iso-8xxx ,那就只有用上一个办法了。但我记得我的 mysql 是 gbk ,不是都改过 my.ini 了吗? jdbc driver 怎么都不自动探测 mysql server 的字符集呢?
这个时候就看到开放源码的好处了 :-) connector-j-3.0.7 源码中确实有代码读取 mysql server 的信息,包括字符集。从注释中知道,
作者为 unicode 转换到单字节字符集写了自己的转换函数,并号称比 jvm 的快百分之多少多少。所以代码中有一段,判段数据库如果使用的是单字节就调用自己的转换函数。但这段代码后面就忘了把多字节字符集交给 jvm 去转换了,所以变成了缺省的 iso-8xxx 转换。
我的修改方式: commysqljdbcConnecter.java 这个文件的 1969 行,
this.doUnicode = true; // force the issue
将之上移四行到 1964 行,放在下面这一行的前面:
try {
用这份代码重新编出来的 jdbc driver ,你的 java 访问数据库的程序不用做任何修改就可以正确读写中文了,不过要记得 mysql server 要 default-character-set=gbk
我使用它测试了几个小程序,中文都显示正常,而且都没死机、异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值