从JDBC驱动程序发送到服务器的所有字符串都会自动从本机Java Unicode格式转换为客户端字符编码,包括使用该格式发送的所有查询Statement.execute ()
,Statement.executeUpdate ()
,Statement.executeQuery ()
和所有人一样PreparedStatement
而且CallableStatement
参数,不包括参数设置使用setBytes ()
,setBinaryStream ()
,setAsciiStream ()
,setUnicodeStream ()
,setBlob ()
.
每个连接的编码数
Connector/J支持客户端和服务器之间的单一字符编码,以及服务器返回给客户端的任意数量的字符编码结果集
.
设置字符编码
客户端和服务器之间的字符编码在连接时自动检测(假设Connector/J连接属性characterEncoding
而且connectionCollation
没有设置)。您可以使用系统变量在服务器上指定编码character_set_server
(有关更多信息,请参见服务器字符集和排序规则).驱动程序自动使用服务器指定的编码。例如,使用4字节UTF-8字符集使用Connector/J,配置MySQL服务器character_set_server = utf8mb4
,然后离开characterEncoding
而且connectionCollation
Connector/J连接字符串。Connector/J将自动检测UTF-8设置。
要重写客户端上自动检测到的编码,请使用characterEncoding
属性在到服务器的连接URL中。在指定字符编码时使用java样式的名称。下表列出了MySQL字符集名称及其对应的java样式名称:
表3.6 MySQL到Java的编码名称转换
MySQL字符集名称 | java风格的字符编码名称 |
---|---|
美国信息交换标准代码 |
us - ascii |
繁体 |
繁体 |
gbk |
GBK |
sjis |
SJIS或Cp932 |
cp932 |
Cp932或MS932 |
gb2312 |
EUC_CN |
里头 |
EUC_JP |
euckr |
EUC_KR |
latin1 |
Cp1252 |
latin2 |
ISO8859_2 |
希腊 |
ISO8859_7 |
希伯来语 |
ISO8859_8 |
cp866 |
Cp866 |
tis620 |
TIS620 |
cp1250 |
Cp1250 |
cp1251 |
Cp1251 |
cp1257 |
Cp1257 |
macroman |
MacRoman |
macce |
MacCentralEurope |
适用于8.0.12及更早版本: 适用于8.0.13及更高版本: |
utf - 8 |
ucs2 |
UnicodeBig |
对于连接器/J 8.0.12及更早版本:为了使用utf8mb4
字符集的连接,服务器必须配置character_set_server = utf8mb4
;如果不是这样,当utf - 8
用于characterEncoding
在连接字符串中,它将映射到MySQL字符集名称use utf8
的别名utf8mb3
.
对于Connector/J 8.0.13及更高版本:
当
utf - 8
用于characterEncoding
在连接字符串中,它映射到MySQL字符集名称utf8mb4
.如果连接选项
connectionCollation
也被放置在characterEncoding
与之不相容,characterEncoding
是否会被对应的编码覆盖connectionCollation
.因为没有java风格的字符集名称
utfmb3
可以和连接选项一起使用charaterEncoding
,只有这样才能使用utf8mb3
作为您的连接字符集是要使用的utf8mb3
排序(例如,utf8_general_ci
)的连接选项connectionCollation
,将强制执行utf8mb3
要使用的字符集,正如在最后一个项目中解释的那样。
不发出查询组名称使用Connector/J,因为驱动程序不会检测到字符集已被查询更改,并且将继续使用连接第一次建立时配置的字符集。