Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
忽略MySQL客户端设置的字符编码_Mysql_Jdbc - Fatal编程技术网

忽略MySQL客户端设置的字符编码

忽略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服务器(v5.7.21),该服务器配置为使用utf8mb4编码并忽略客户端设置的编码。以下是my.ini配置文件的相关部分(我正在运行Windows):

我的客户端是一个使用JDBC驱动程序的ETL(Talend):
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|
'------------------------+------------------'