文档主页
MySQL Connector/J 开发人员指南
相关文档 下载本手册
PDF (US Ltr) - 1.2Mb
PDF (A4) - 1.2Mb


MySQL Connector/J 开发人员指南  /  Connector/J 参考  /  使用字符集和 Unicode

6.7 使用字符集和 Unicode

从 JDBC 驱动程序发送到服务器的所有字符串都将自动从本地 Java Unicode 形式转换为连接的字符编码,包括使用 Statement.execute()Statement.executeUpdate()Statement.executeQuery() 发送的所有查询,以及所有 PreparedStatementCallableStatement 参数,不包括 使用以下方法设置的参数

  • setBlob()

  • setBytes()

  • setClob()

  • setNClob()

  • setAsciiStream()

  • setBinaryStream()

  • setCharacterStream()

  • setNCharacterStream()

  • setUnicodeStream()

每个连接的编码数量

Connector/J 支持客户端和服务器之间单个字符编码,以及在 ResultSets 中从服务器返回到客户端的数据的任意数量的字符编码。

设置字符编码

对于 Connector/J 8.0.25 及更早版本: 客户端和服务器之间的字符编码在连接时自动检测(前提是 Connector/J 连接属性 characterEncodingconnectionCollation 未设置)。服务器上的编码使用系统变量 character_set_server 指定(有关更多信息,请参见 服务器字符集和排序规则),驱动程序会自动使用该编码。例如,要将 4 字节 UTF-8 字符集 与 Connector/J 一起使用,请使用 character_set_server=utf8mb4 配置 MySQL 服务器,并将 characterEncodingconnectionCollation 从 Connector/J 连接字符串中排除。然后,Connector/J 将自动检测 UTF-8 设置。要覆盖客户端上自动检测的编码,请在连接到服务器的连接 URL 中使用 characterEncoding 属性。

对于 Connector/J 8.0.26 及更高版本: 连接初始化期间有两个阶段会设置字符编码和排序规则。

自定义字符集和排序规则

要支持在服务器上使用自定义字符集和排序规则,请将 Connector/J 连接属性 detectCustomCollations 设置为 true,并通过使用 customCharsetMapping 连接属性提供带逗号分隔的 custom_charset:java_encoding 对列表(例如:customCharsetMapping=charset1:UTF-8,charset2:Cp1252)来提供自定义字符集和 Java 字符编码之间的映射。

MySQL 到 Java 编码名称翻译

在指定字符编码时使用 Java 风格的名称。下表列出了 MySQL 字符集名称及其对应的 Java 风格名称

表 6.21 MySQL 到 Java 编码名称翻译

MySQL 字符集名称 Java 风格的字符编码名称
ascii US-ASCII
big5 Big5
gbk GBK
sjis SJIS 或 Cp932
cp932 Cp932 或 MS932
gb2312 EUC_CN
ujis EUC_JP
euckr EUC_KR
latin1 Cp1252
latin2 ISO8859_2
greek ISO8859_7
hebrew ISO8859_8
cp866 Cp866
tis620 TIS620
cp1250 Cp1250
cp1251 Cp1251
cp1257 Cp1257
macroman MacRoman
macce MacCentralEurope
utf8mb4 UTF-8
ucs2 UnicodeBig

注释

  • UTF-8 用于连接字符串中的 characterEncoding 时,它会映射到 MySQL 字符集名称 utf8mb4

  • 如果连接选项 connectionCollation 也与 characterEncoding 一起设置,并且与它不兼容,则 characterEncoding 将被与 connectionCollation 相对应的编码覆盖。

  • 由于没有用于 utfmb3 的 Java 风格字符集名称,您可以在连接选项 charaterEncoding 中使用它,因此,使用 utf8mb3 作为连接字符集的唯一方法是使用连接选项 connectionCollationutf8mb3 排序规则(例如,utf8_general_ci),这会强制使用 utf8mb3 字符集,如最后一项所述。

警告

不要使用 Connector/J 发出 SET NAMES 查询,因为驱动程序将无法检测到该查询已更改字符集,并将继续使用在首次设置连接时配置的字符集。