首页 > 运维 > Docker > 正文

docker mysql 中文乱码

WBOY
发布: 2023-05-13 17:08:08
原创
1553 人浏览过

在使用Docker容器部署MySQL数据库时,有时会出现中文乱码的情况。这是因为MySQL默认字符集为Latin1,而中文字符需要使用UTF-8编码。本文将介绍如何解决docker mysql中文乱码问题。

一、查看当前MySQL字符集

首先,我们需要查看当前MySQL的字符集。可以通过登录到MySQL后使用以下命令:

mysql> show variables like '%char%';
登录后复制

其中,字符集相关的变量有:

  • character_set_client:客户端字符集,也就是连接MySQL的客户端所使用的字符集;
  • character_set_connection:连接字符集,也就是服务器与客户端之间的字符集;
  • character_set_database:数据库字符集,新创建的数据库会按此字符集创建;
  • character_set_results:结果字符集,SELECT查询返回的结果所使用的字符集;
  • character_set_server:服务器字符集,MySQL服务器本身所使用的字符集。

二、修改MySQL字符集为UTF-8

查看到当前MySQL字符集为Latin1后,我们需要修改为UTF-8。可以通过以下两种方式实现:

  1. 修改MySQL配置文件

在MySQL配置文件中(通常是/etc/my.cnf或/etc/mysql/my.cnf),添加以下两行内容:

[client]
default-character-set=utf8

[mysqld]
character-set-server=utf8
登录后复制

其中,[client]用于设置客户端字符集为UTF-8,[mysqld]用于设置服务器字符集为UTF-8。修改完成后重启MySQL服务:

sudo service mysql restart
登录后复制
  1. 连接MySQL后修改字符集

如果无法修改MySQL配置文件,可以在连接MySQL后手动修改字符集。可以通过以下命令连接到MySQL:

mysql --default-character-set=utf8 -u用户名 -p密码 数据库名
登录后复制

连接成功后,依次执行以下命令修改字符集:

SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_results = utf8;
SET character_set_server = utf8;
登录后复制

修改完成后,退出MySQL,再次登录即可生效。

三、在Docker容器中使用UTF-8字符集

由于Docker容器中的MySQL是基于镜像运行的,因此我们需要在镜像中设置UTF-8字符集。可以通过以下Dockerfile来构建MySQL镜像:

FROM mysql:latest
ENV MYSQL_ROOT_PASSWORD=root
ENV MYSQL_DATABASE=test
ENV MYSQL_CHARSET=utf8
ENV MYSQL_COLLATION=utf8_general_ci
COPY ./init.sql /docker-entrypoint-initdb.d/
登录后复制

其中,ENV命令用于设置环境变量,MYSQL_CHARSET用于设置MySQL字符集为UTF-8,MYSQL_COLLATION用于设置排序规则为utf8_general_ci。这里还通过COPY命令将初始化脚本init.sql复制到镜像中,用于在启动容器时自动执行。

四、总结

通过以上三个步骤,我们可以在Docker容器中使用MySQL,并且设置字符集为UTF-8,避免中文乱码的问题。当然,如果需要处理多语言字符集,还需根据具体情况进行调整。希望该文章能对大家有所帮助。

以上是docker mysql 中文乱码的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!