我正在连接到 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
没有效果。非常确定您需要做的就是为配置设置一个值
# ignore the character set during client handshake
skip-character-set-client-handshake = 1