【bug】mysql 容器无法显示中文

当 Docker 创建的 MySQL 容器无法输入中文时,这通常是由于容器内的字符集配置不正确所导致的。以下是一些解决此问题的步骤:

1. 检查并修改容器内的字符集

首先,需要进入 MySQL 容器并检查当前的字符集设置。可以通过以下命令进入容器:

sh 复制代码
sh复制代码

docker exec -it mysql-container bash

其中 mysql-container 是你的 MySQL 容器的名称。进入容器后,可以使用 locale 命令来查看当前的字符集设置:

sh 复制代码
sh复制代码

locale

如果看到 LC_CTYPELC_MESSAGES 等环境变量设置为 POSIX 或其他不支持中文的字符集,那么需要将其修改为支持中文的字符集,如 C.UTF-8

可以通过以下命令临时修改字符集(仅在当前会话中有效):

sh 复制代码
export LANG=C.UTF-8  
export LC_ALL=C.UTF-8

为了永久修改字符集,可以在 Dockerfile 中添加以下环境变量设置:

Dockerfile 复制代码
ENV LANG C.UTF-8  
ENV LC_ALL C.UTF-8

然后重新构建并运行容器。

2. 修改 MySQL 服务器的字符集

除了修改容器内的字符集外,还需要确保 MySQL 服务器本身也使用支持中文的字符集。这可以通过修改 MySQL 的配置文件(如 my.cnf)或在启动 MySQL 服务时指定字符集参数来实现。

my.cnf 文件中,可以添加或修改以下配置项:

ini 复制代码
[mysqld]  
character-set-server=utf8mb4  
collation-server=utf8mb4_unicode_ci

然后,将配置文件挂载到容器中,并重启 MySQL 服务。

3. 检查客户端字符集设置

当使用客户端(如 MySQL 命令行工具)连接到 MySQL 服务器时,需要确保客户端使用的字符集与服务器匹配。可以在连接时指定字符集,如:

sh 复制代码
sh复制代码

mysql --default-character-set=utf8mb4 -uroot -p

或者在连接到 MySQL 后,使用 SET NAMES 语句来设置客户端、结果集和服务器之间的字符集:

sql 复制代码
sql复制代码

SET NAMES 'utf8mb4';

4. 验证配置

最后,需要验证配置是否生效。可以连接到 MySQL 服务器,并使用以下 SQL 命令来检查字符集和排序规则的设置:

sql 复制代码
SHOW VARIABLES LIKE 'character_set%';  
SHOW VARIABLES LIKE 'collation%';

确保这些变量的值设置为支持中文的字符集和排序规则。

通过以上步骤,应该能够解决 Docker 创建的 MySQL 容器无法输入中文的问题。如果问题仍然存在,可能需要检查 Docker 容器的其他配置或日志以获取更多信息。

相关推荐
蟹至之1 天前
增删查改(其一) —— insert插入 与 select条件查询
数据库·mysql·增删查改
Yeats_Liao1 天前
时序数据库系列(七):性能监控实战指标收集
数据库·后端·时序数据库
无心水1 天前
【中间件:Redis】1、Redis面试核心:线程模型深度解析(6.0前后变化+工作流程)
数据库·redis·面试·redis面试·redis原理·redis线程模型·后端技术
milanyangbo1 天前
从同步耦合到异步解耦:消息中间件如何重塑系统间的通信范式?
java·数据库·后端·缓存·中间件·架构
绛洞花主敏明1 天前
Gorm(十四)的多条件叠加
数据库
枫叶丹41 天前
【Qt开发】布局管理器(五)-> QSpacerItem 控件
开发语言·数据库·c++·qt
伯恩bourne1 天前
【SqlServer】日志文件无法收缩的解决方法
数据库·oracle·sqlserver
星光一影1 天前
SpringBoot+Vue3无人机AI巡检系统
人工智能·spring boot·websocket·mysql·intellij-idea·mybatis·无人机
像风一样自由20201 天前
Redis与MinIO:两大存储利器的区别与联系
数据库·redis·缓存·minio
todoitbo1 天前
使用n8n搭建服务器监控系统:从Webhook到Telegram告警的完整实现
运维·服务器·数据库·ai·向量数据库·流处理·n8n