JDBC连接字符编码如何工作?

时间:2018-09-07 08:44:24

标签: java jdbc character-encoding

在JDBC URL中,您指定字符编码。

例如:

jdbc:mysql://host:3306/db?characterEncoding=UTF8

jdbc:teradata://host/DBS_PORT=1025,DATABASE=Orders,CHARSET=UTF8

我试图了解其实际工作原理。

这是否意味着客户端专门询问服务器要在哪个字符编码中获取数据?

如果实际数据以不同的字符编码保存在DB中(例如Shift_JIS),则DB服务器在将数据发送到客户端之前是否执行编码转换? (在此示例中,从SJIS到UTF-8吗?)

1 个答案:

答案 0 :(得分:2)

这与JDBC没有直接关系,但是它是单个JDBC驱动程序的特定实现细节。并非所有驱动程序/数据库都允许您指定连接字符集。这可能是因为他们的协议始终使用特定的字符集,或者编码固定为每列,并与数据一起进行通信。而且,如果驱动程序确实具有这样的属性,则其影响将因驱动程序/数据库系统而异,甚至因特定的数据库,表甚至列而异。

实际上不可能确切地概括这种设置对驱动程序的作用。


我已经发现很难描述我所维护的JDBC驱动程序的连接字符集的确切效果(和边缘情况)...,更不用说考虑/研究其他驱动程序了。