我正在运行带有自定义配置文件的 MySQL docker 容器(最新版本 - 8.0),其中包含:
======================================
[client]
default-character-set=utf8mb4
[mysqld]
collation_server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character_set_server = utf8mb4
[mysql]
default-character-set=utf8mb4
======================================
Run Code Online (Sandbox Code Playgroud)
在 MySQL 控制台中执行:
show variables like "%coll%";
Run Code Online (Sandbox Code Playgroud)
产生这个:
+-------------------------------+--------------------+
| Variable_name | Value |
+-------------------------------+--------------------+
| collation_connection | utf8mb4_0900_ai_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
| default_collation_for_utf8mb4 | utf8mb4_0900_ai_ci |
+-------------------------------+--------------------+
Run Code Online (Sandbox Code Playgroud)
在 MySQL 控制台中执行:
show variables like "%char%";
Run Code Online (Sandbox Code Playgroud)
产生这个:
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
Run Code Online (Sandbox Code Playgroud)
但是当我使用以下命令访问 MySQL 控制台时:
docker exec -it mysql1 mysql -uroot -p*********
Run Code Online (Sandbox Code Playgroud)
我不能使用西里尔文(俄文)字符。当我切换到俄语语言环境并尝试输入任何内容时,控制台只会忽略按键,屏幕上不显示任何内容。但是当我切换到英语语言环境时,一切又开始工作。
我能做些什么来解决这个问题?
PS:我能够通过 DataGrip 与数据库交互,并为表名、字段和记录输入俄语字符。当我在 docker 容器内的 MySQL 控制台中时,我完全无法使用俄语字符。
PPS:MySQL 从 MacOS Mojave 上的官方 Docker 映像运行,我使用的是 iTerm 3.2.6。iTerm 中的字符编码设置为“Unicode (UTF-8)”
事实证明,这确实是 Docker 问题,而不是 MySQL。
Vanilla MySQL 映像建立在 Debian 9 上,默认情况下它缺少 UTF-8 支持。所以我必须按照以下步骤操作:
docker exec -it mysql1 bash并运行apt-get updateapt-get install vim apt-get install localesdpkg-reconfigure locales并选择376了ru_RU.UTF-8出口 LANG=ru_RU.utf8
出口语言=ru_RU.utf8
导出 LC_ALL=ru_RU.utf8
现在我可以在 MySQL docker 控制台中使用俄语字符。
PS:我想一个更干净、更“Dockeresque”的解决方案是从 Dockerfile 运行这些命令。如果有人可以通过 dockerfile 示例提供答案,我很乐意接受。