jdbc mysql url 编码_JDBC URL中关于字符编码的配置参数

JDBC Driver使用的JDBC URL中关于字符编码的配置参数主要有两个:

useUnicode:是否使用自定义的编码方案

characterEncoding:指定的编码方案

一个具体的JDBC URL的例子如下:

jdbc:mysql://127.0.0.1:3306/dslztx?useUnicode=true&characterEncoding=utf8

这里的"characterEncoding"跟"Content-Type:application/json;charset=UTF-8"中的"charset"的作用类似,都是用来配置将字符流转换成字节流的时候所使用的编码方案,编码得到的字节流将在网络中传输

整个转换过程可以描绘成如下的步骤:

1)发送端使用配置的"characterEncoding"值,将字符流编码成字节流

2)将1)中得到的字节流通过网络传输到接收端

3)在接收端,已经预先接收获取发送端配置的"characterEncoding"值,利用该值,解码字节流,得到字符流

接下来,做几个实验:

1)

JDBC URL:jdbc:mysql://127.0.0.1:3306/dslztx?useUnicode=true&characterEncoding=gbk

SQL:INSERT INTO `Footer` (`ID`,`Value`) VALUES (1,'好');

过程:

0818b9ca8b590ca3270a3433284dd417.png

Mysql连接中的数据截取图:

0818b9ca8b590ca3270a3433284dd417.png

2)

JDBC URL:jdbc:mysql://127.0.0.1:3306/dslztx?useUnicode=true&characterEncoding=utf8

SQL:INSERT INTO `Footer` (`ID`,`Value`) VALUES (1,'好');

过程:

0818b9ca8b590ca3270a3433284dd417.png

Mysql连接中的数据截取图:

0818b9ca8b590ca3270a3433284dd417.png

3)

JDBC URL:jdbc:mysql://127.0.0.1:3306/dslztx?useUnicode=true&characterEncoding=gbk

SQL:INSERT INTO `Footer` (`ID`,`Value`) VALUES (1,'�');

过程:

0818b9ca8b590ca3270a3433284dd417.png

Mysql连接中的数据截取图:

0818b9ca8b590ca3270a3433284dd417.png

分析:

在GBK编码方案中,不能编码“�”字符,JDBC Driver自动以"?"字符代替(解决”不能编码字符“问题选用的是《字符不能被选定编码方案编码的解决方案》[1]所描述的第一种解决方案),GBK编码方案兼容ASCII编码方案,在ASCII编码方案中,"?"字符的字节流为"3f"。

4)

JDBC URL:jdbc:mysql://127.0.0.1:3306/dslztx?useUnicode=true&characterEncoding=utf8

SQL:INSERT INTO `Footer` (`ID`,`Value`) VALUES (1,'�'); 过程:

0818b9ca8b590ca3270a3433284dd417.png

Mysql连接中的数据截取图:

0818b9ca8b590ca3270a3433284dd417.png

备注: JDBC Driver使用Tcp协议来作为Mysql连接使用的传输协议[2],因而可以通过"sudo tcpdump -X -i lo dst 127.0.0.1 and tcp port 3306"命令[3]来解析Mysql连接中传输的数据包

上面实验中的数据截取图就是通过该命令获得的

参考文献:

[1]http://blog.csdn.net/dslztx/article/details/47173553 [2]http://www.caucho.com/resin-4.0/admin/database.xtp [3]http://www.51testing.com/html/78/22578-142353.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值