JDBC的乱码解决

java中原生态支持unicode,内存中的String对象都是unicode编码,对于从mysql获取的字符串数据,理所当然需要先转化为unicode才能被使用,因此从ResultSet中获取字符串列值时,jdbc需要知道当前字段的原始编码,即从mysql-server接收到的原始字节所对应的编码,才能正确的将其转化为unicode供程序使用,此文介绍jdbc是如何获取当前字段的原始编码的。

原始编码的获得流程如下:
首先,如果在链接字符串中设置了编码,则原始编码=所指定的编码,比如:
jdbc:mysql://127.0.0.1:3306/mysql?useUnicode=true&characterEncoding=utf8
那原始编码=utf8。

如果没有在在链接字符串中设置编码,则原始编码=NULL,并且建立链接后执行
SET character_set_results = NULL
表示不希望服务器执行任何的转换,即字段在mysql中是什么编码,接收到的就是什么编码。

如果在链接的使用过程中有"SET NAMES XXX",则原始编码=XXX。

当进行ResultSet.getString()时,如果当前原始编码不为空,则直接将原始byte[]从原始编码转换成String;如果当前原始编码未空,则用mysql返回的field信息中的字段编码作为原始编码,将原始byte[]从原始编码转换成String。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值