从 JDBC 驱动程序发送到服务器的所有字符串都会自动从本机 Java Unicode 格式转换为客户端字符编码,包括使用
        Statement.execute()、
         Statement.executeUpdate()、 和
        发送的所有查询Statement.executeQuery(),以及所有
        PreparedStatement和
        CallableStatement参数,不包括使用setBytes()、
         setBinaryStream()、
         setAsciiStream()、
        setUnicodeStream()和
        设置的参数setBlob()。
      
每个连接的编码数
        Connector/J 支持客户端和服务器之间的单一字符编码,以及服务器返回给客户端的任意数量的字符编码
        ResultSets。
      
设置字符编码
        对于 Connector/J 8.0.25 及更早版本:连接时会自动检测客户端和服务器之间的字符编码(前提是 Connector/J 连接属性
        characterEncoding
        未
        connectionCollation
        设置)。服务器上的编码是使用系统变量指定的
        character_set_server(有关更多信息,请参阅服务器字符集和排序规则),驱动程序会自动使用该编码。例如,要在 Connector/J 中使用
        4 字节 UTF-8 字符集,请将 MySQL 服务器配置为
        character_set_server=utf8mb4, 并保留
        characterEncoding
        和
        connectionCollation
        在 Connector/J 连接字符串之外。然后 Connector/J 将自动检测 UTF-8 设置。要覆盖客户端自动检测到的编码,请使用
        characterEncoding
        服务器连接 URL 中的属性。
      
对于 Connector/J 8.0.26 及更高版本:连接初始化期间有两个阶段,其中设置字符编码和排序规则。
- 
Pre-Authentication Phase:在这个阶段,客户端和服务器之间的字符编码由Connector/J连接属性的设置决定,优先级如下: 
- 设置为 - UTF8(对应- utf8mb4于 MySQL 服务器),如果以上属性均未设置
 
- 
身份验证后阶段:在此阶段,会话其余部分的客户端和服务器之间的字符编码由 Connector/J 连接属性的设置确定,优先级如下: 
- 设置为 - UTF8(对应- utf8mb4于 MySQL 服务器),如果以上属性均未设置
 这意味着Connector/J需要发布一个 SET NAMES Statement来更改在预认证阶段建立的字符集和排序规则只有当 passwordCharacterEncoding设置了,但它的设置与的不同connectionCollation,或者与characterEncoding(当connectionCollation是未设置)或不同于utf8mb4(当两者connectionCollation都未characterEncoding设置时)。
自定义字符集和排序规则
        仅适用于 Connector/J 8.0.26 及更高版本:要支持在服务器上使用自定义字符集和排序规则,请将 Connector/J 连接属性设置
        detectCustomCollations
        为true,并通过提供自定义字符集和 Java 字符编码之间的映射customCharsetMapping带有逗号分隔的
        的
        (例如:)
        。
      custom_charset:java_encodingcustomCharsetMapping=charset1:UTF-8,charset2:Cp1252
MySQL 到 Java 编码名称翻译
指定字符编码时使用 Java 风格的名称。下表列出了 MySQL 字符集名称及其对应的 Java 样式名称:
表 6.21 MySQL 到 Java 编码名称的转换
| MySQL 字符集名称 | Java 风格的字符编码名称 | 
|---|---|
| ascii | US-ASCII | 
| big5 | Big5 | 
| gbk | GBK | 
| sjis | SJIS or Cp932  | 
| cp932 | Cp932 or 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 | 
| 
                对于 8.0.12 及更早版本:
                 
                对于 8.0.13 及更高版本:
                 | UTF-8 | 
| ucs2 | UnicodeBig | 
          对于 Connector/J 8.0.12 及更早版本:为了使用
          utf8mb4
          连接字符集,服务器必须配置为
          character_set_server=utf8mb4;如果不是这种情况,当UTF-8中使用 forcharacterEncoding时,它将映射到 MySQL 字符集名称
          utf8,它是 的别名
          utf8mb3。
        
对于连接器/J 8.0.13 及更高版本:
- 当 - UTF-8用于- characterEncoding连接字符串时,它映射到 MySQL 字符集名称- utf8mb4。
- 如果连接选项 - connectionCollation也- characterEncoding与它一起设置并且与其不兼容,- characterEncoding则将被对应于- connectionCollation.
- 因为没有 - utfmb3可与连接选项一起使用的Java 样式字符集名称,用作连接字符集- charaterEncoding的唯一方法是对连接选项使用排序规则(例如, ),这会强制使用字符集要使用,如上一个项目符号中所述。- utf8mb3- utf8mb3- utf8_general_ci- connectionCollation- utf8mb3
不要使用 Connector/J 发出查询SET NAMES,因为驱动程序不会检测到字符集已被查询更改,并将继续使用首次建立连接时配置的字符集。