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

问题描述 投票:0回答:1

我正在连接到 MySQL 服务器(v5.7.21),该服务器配置为使用 utf8mb4 编码并忽略客户端设置的编码。以下是 my.ini 配置文件的相关部分(我运行的是 Windows):

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-client-handshake=FALSE
skip-character-set-client-handshake #I've added this but it has no effect
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

我的客户端是一个使用 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 编码(这是预期的)。
看来设置

character-set-client-handshake=FALSE
skip-character-set-client-handshake
没有效果。
如何防止客户端更改编码并强制其始终使用 utf8mb4 ?

mysql jdbc
1个回答
0
投票

非常确定您需要做的就是为配置设置一个值

# ignore the character set during client handshake
skip-character-set-client-handshake = 1
© www.soinside.com 2019 - 2024. All rights reserved.