忽略MySQL客户端设置的字符编码
我正在连接一个MySQL服务器(v5.7.21),该服务器配置为使用utf8mb4编码并忽略客户端设置的编码。以下是my.ini配置文件的相关部分(我正在运行Windows): 我的客户端是一个使用JDBC驱动程序的ETL(Talend):忽略MySQL客户端设置的字符编码,mysql,jdbc,Mysql,Jdbc,我正在连接一个MySQL服务器(v5.7.21),该服务器配置为使用utf8mb4编码并忽略客户端设置的编码。以下是my.ini配置文件的相关部分(我正在运行Windows): 我的客户端是一个使用JDBC驱动程序的ETL(Talend):mysql-connector-java-5.1.30-bin.jar 如果我设置驱动程序属性:characterEncoding=utf8,这将覆盖服务器设置的字符编码(utf8mb4),如下查询所示: SHOW VARIABLES WHERE Varia
mysql-connector-java-5.1.30-bin.jar
如果我设置驱动程序属性:
characterEncoding=utf8
,这将覆盖服务器设置的字符编码(utf8mb4),如下查询所示:
SHOW VARIABLES
WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'
|=-----------------------+-----------------=|
|Variable_Name |Value |
|=-----------------------+-----------------=|
|character_set_client |utf8 |
|character_set_connection|utf8 |
|character_set_database |utf8mb4 |
|character_set_filesystem|binary |
|character_set_results | |
|character_set_server |utf8mb4 |
|character_set_system |utf8 |
|collation_connection |utf8_general_ci |
|collation_database |utf8mb4_unicode_ci|
|collation_server |utf8mb4_unicode_ci|
'------------------------+------------------'
如果我没有在连接上设置任何驱动程序属性,将使用utf8mb4编码(这是预期的)。似乎设置
字符集客户端握手=FALSE
和跳过字符集客户端握手
没有效果。如何防止客户端更改编码并强制其始终使用utf8mb4?您似乎通过不设置connection属性来获得所需的结果,为什么它还不够?是否要防止错误配置?您不能阻止客户端使用它想要使用的编码,而是由客户端决定如何发送和读取(=解释)消息。是的,防止错误配置是原因之一。但令我困扰的是,MySQL的行为并不像参考文献所说的那样:“要忽略客户端信息并使用默认的服务器字符集,请使用--skip character set client handshake;”。为什么这不起作用?
SHOW VARIABLES
WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'
|=-----------------------+-----------------=|
|Variable_Name |Value |
|=-----------------------+-----------------=|
|character_set_client |utf8 |
|character_set_connection|utf8 |
|character_set_database |utf8mb4 |
|character_set_filesystem|binary |
|character_set_results | |
|character_set_server |utf8mb4 |
|character_set_system |utf8 |
|collation_connection |utf8_general_ci |
|collation_database |utf8mb4_unicode_ci|
|collation_server |utf8mb4_unicode_ci|
'------------------------+------------------'