首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在mysql停靠控制台中使用西里尔字符

无法在mysql停靠控制台中使用西里尔字符
EN

Database Administration用户
提问于 2018-12-28 20:41:38
回答 3查看 3.7K关注 0票数 4

我正在运行一个包含以下自定义配置文件的MySQL停靠容器(最新- 8.0):

代码语言:javascript
复制
======================================
[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
======================================

在MySQL控制台内执行:

代码语言:javascript
复制
show variables like "%coll%";

产生这种情况:

代码语言:javascript
复制
+-------------------------------+--------------------+
| 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 |
+-------------------------------+--------------------+

在MySQL控制台内执行:

代码语言:javascript
复制
show variables like "%char%";

产生这种情况:

代码语言:javascript
复制
+--------------------------+--------------------------------+
| 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/ |
+--------------------------+--------------------------------+

但是,当我在MySQL控制台上使用:

代码语言:javascript
复制
docker exec -it mysql1 mysql -uroot -p********* 

我不能用西里尔(俄语)字符。当我切换到俄罗斯地区并尝试键入任何内容时,控制台只会忽略按键,屏幕上就不会显示任何内容。但当我转到英语现场时,一切又开始运转了。

我能做些什么来解决这个问题?

PS:我能够通过DataGrip与数据库进行交互,并为表名、字段和记录输入俄文字符。当我在码头容器中的MySQL控制台中时,我完全不能使用俄语字符。

MySQL是从MacOS Mojave上的一个正式的Docker映像中运行的,我使用的是iTerm 3.2.6。iTerm中的字符编码设置为"Unicode (UTF-8)“。

EN

回答 3

Database Administration用户

回答已采纳

发布于 2018-12-29 08:46:40

事实证明,这确实是一个码头问题,而不是MySQL。

香草MySQL映像是建立在Debian 9和默认情况下,它缺乏UTF-8的支持。所以我不得不遵循以下步骤:

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

出口LANG=ru_RU.utf8出口LANGUAGE=ru_RU.utf8出口LC_ALL=ru_RU.utf8

  1. 退出shell并重新启动容器

现在,我可以在MySQL码头控制台中使用俄罗斯字符。

PS:我想一个更干净、更"Dockeresque“的解决方案是从Dockerfile中运行这些命令。如果有人能提供一个dockerfile例子的答案,我会很乐意接受的。

票数 7
EN

Database Administration用户

发布于 2020-04-16 14:08:31

使用以下参数运行Docker容器:

-e LANG=C.UTF-8

或者更新您的Dockerfile:

ENV LANG C.UTF-8

票数 0
EN

Database Administration用户

发布于 2021-07-06 17:49:54

我在输入法语重音字符时也有同样的问题。使用ruslaniv的答案,这里有一个Dockerfile允许您更正这个问题:

代码语言:javascript
复制
FROM mariadb:10.3.23
RUN apt update && \
    apt install locales
RUN locale-gen --purge "en_US.UTF-8" && \
    dpkg-reconfigure --frontend noninteractive locales && \
    echo export LC_ALL=en_US.utf8 >>  ~/.bashrc

请注意,对于MariaDB Docker映像,问题是相同的,您只需指定任何有效的UTF-8区域设置。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/225942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档