【发布时间】:2021-08-11 10:49:04
【问题描述】:
根据https://dev.mysql.com/doc/refman/5.6/en/charset-connection.html,当我使用mysql 8.0客户端使用命令连接到mysql 5.6服务器时:
/usr/bin/mysql -h ${DB_HOST} -u ${DB_USER} -p --default-character-set=utf8mb4
我希望客户端会建立到服务器的 utf8mb4 连接。但是,连接设置为 latin1:
mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME IN (
'character_set_client', 'character_set_connection', 'character_set_results', 'collation_connection' )
ORDER BY VARIABLE_NAME;
+--------------------------+-------------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+--------------------------+-------------------+
| CHARACTER_SET_CLIENT | latin1 |
| CHARACTER_SET_CONNECTION | latin1 |
| CHARACTER_SET_RESULTS | latin1 |
| COLLATION_CONNECTION | latin1_swedish_ci |
+--------------------------+-------------------+
使用另一个字符集,例如:
/usr/bin/mysql -h ${DB_HOST} -u ${DB_USER} -p --default-character-set=koi8r 将导致客户端使用提供的字符集进行连接:
mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME IN ( 'character_set_client', 'character_set_connection', 'character_set_results', 'collation_connection' ) ORDER BY VARIABLE_NAME;
+--------------------------+------------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+--------------------------+------------------+
| CHARACTER_SET_CLIENT | koi8r |
| CHARACTER_SET_CONNECTION | koi8r |
| CHARACTER_SET_RESULTS | koi8r |
| COLLATION_CONNECTION | koi8r_general_ci |
+--------------------------+------------------+
我可以改变客户端连接的唯一方法是在连接到服务器后执行charset utf8mb4 或SET NAMES utf8mb4。
mysql> SET NAMES utf8mb4;
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME IN ( 'character_set_client', 'character_set_connection', 'character_set_results', 'collation_connection' ) ORDER BY VARIABLE_NAME;
+--------------------------+--------------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+--------------------------+--------------------+
| CHARACTER_SET_CLIENT | utf8mb4 |
| CHARACTER_SET_CONNECTION | utf8mb4 |
| CHARACTER_SET_RESULTS | utf8mb4 |
| COLLATION_CONNECTION | utf8mb4_general_ci |
+--------------------------+--------------------+
为什么 --default-character-set=utf8mb4 不起作用?我想使用其他客户端工具,如 mysqldump 和 mysqlimport,但如果没有这个标志,我将获得 latin1 编码而不是 utf8mb4 编码。在这种情况下,无法更改默认服务器设置,必须从客户端完成。
更多信息:我正在尝试安装 20.04 的 ubuntu WSL2,因此没有可用的 5.6 或 5.7 客户端。但是,使用 5.6 或 5.7 windows mysql 客户端会遵守 --default-character-set=utf8mb4,但 8.0 windows 客户端的行为与 WSL2 客户端相同。
【问题讨论】: