从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连接字符串中取出。连接器/J将自动检测UTF-8设置。
要覆盖客户端上自动检测到的编码,请使用characterEncoding
属性在连接到服务器的URL中。在指定字符编码时使用java样式的名称。下表列出了MySQL字符集名称及其对应的java风格名称:
表5.3 MySQL到Java的编码名称转换
MySQL字符集名称 | java风格字符编码名称 |
---|---|
美国信息交换标准代码 |
us - ascii |
繁体 |
繁体 |
gbk |
GBK |
sjis |
SJIS (MySQL服务器< 4.1.11时为Cp932或MS932) |
cp932 |
Cp932或MS932 (MySQL Server > 4.1.11) |
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 |
5.1.46及更早版本: 5.1.47及以上版本: |
utf - 8 |
ucs2 |
UnicodeBig |
对于Connector/J 5.1.46及更早版本:为了使用utf8mb4
字符集用于连接,服务器必须配置character_set_server = utf8mb4
;如果不是这样,什么时候utf - 8
用于characterEncoding
在连接字符串中,它将映射到MySQL字符集名称use utf8
的别名utf8mb3
.
对于Connector/J 5.1.47及以后版本:
当
utf - 8
用于characterEncoding
在连接字符串中,它映射到MySQL字符集名称utf8mb4
.如果连接选项
connectionCollation
也被设置在characterEncoding
和它是不相容的,characterEncoding
将被覆盖对应的编码connectionCollation
.因为没有java风格的字符集名称
utfmb3
可以与连接选项一起使用charaterEncoding
,唯一的使用方式utf8mb3
当您的连接字符集是使用utf8mb3
排序(例如,utf8_general_ci
)查看连接选项connectionCollation
,将强制utf8mb3
要使用的字符集,正如最后一个项目说明的那样。
不发出查询组名称使用Connector/J,因为驱动程序不会检测到字符集已被查询更改,并将继续使用连接首次设置时配置的字符集。