无法在 mysql docker 控制台中使用西里尔字符

rus*_*niv 4 mysql docker

我正在运行带有自定义配置文件的 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)”

rus*_*niv 6

事实证明,这确实是 Docker 问题,而不是 MySQL。

Vanilla MySQL 映像建立在 Debian 9 上,默认情况下它缺少 UTF-8 支持。所以我必须按照以下步骤操作:

  1. 登录到 Docker 容器docker exec -it mysql1 bash并运行apt-get update
  2. 然后运行 apt-get install vim apt-get install locales
  3. 运行dpkg-reconfigure locales并选择376ru_RU.UTF-8
  4. 打开 ~/.bashrc 并添加

出口 LANG=ru_RU.utf8

出口语言=ru_RU.utf8

导出 LC_ALL=ru_RU.utf8

  1. 退出shell并重启容器

现在我可以在 MySQL docker 控制台中使用俄语字符。

PS:我想一个更干净、更“Dockeresque”的解决方案是从 Dockerfile 运行这些命令。如果有人可以通过 dockerfile 示例提供答案,我很乐意接受。