从 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的唯一方法是对连接选项使用排序规则(例如, ),这会强制使用字符集要使用,如上一个项目符号中所述。utf8mb3utf8mb3utf8_general_ciconnectionCollationutf8mb3
不要使用 Connector/J 发出查询SET NAMES,因为驱动程序不会检测到字符集已被查询更改,并将继续使用首次建立连接时配置的字符集。