这篇文章发布于 2016.11.03
,记录如何解决 mysql
容器查询结果乱码的问题。
使用 docker
创建一个 mysql
容器实例,发现在某些场景下会遇到查询结果乱码。
这是因为创建的 mysql容器默认使用 latin1字符集,为了修正乱码问题需要设置 utf8
字符集。
1. 当前字符集
mysql> show variables like '%char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
2. 版本
容器镜像: mysql:5.7 容器系统: debian 8 (jessie) Docker主机: Ubuntu Server 16.04
mysql
提供了一些环境变量和配置项目,用于调整 mysql容器实例的配置参数。要解决上述问题,可以在创建容器时指定mysql
实例使用的字符集选项。
1. 创建 mysql容器
docker run --name mysql-server -t \ -e MYSQL_DATABASE="zabbix" \ -e MYSQL_USER="zabbix" \ -e MYSQL_PASSWORD="password" \ -e MYSQL_ROOT_PASSWORD="password" \ -e TZ=Asia/Chongqing \ -v mysql-data:/var/lib/mysql \ -d mysql:5.7 \ --character-set-server=utf8 \ --collation-server=utf8_general_ci \ --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
为了持久化数据,使用 -v
选项指定容器的数据卷 mysql-data
。
可以参考《如何使用Docker数据卷?》
2. mysql 变量&参数
'环境变量': MYSQL_DATABASE # 指定创建的数据库名称 MYSQL_USER # 授权数据库的用户 MYSQL_PASSWORD # 用户密码 MYSQL_ROOT_PASSWORD # mysql 实例 root 用户密码 '配置项目': `--character-set-server=name` 设置默认字符集。 `--collation-server=name` 设置排序字符集。 `--sql-mode` 配置项用于配置sql模式,不需要可以删除该配置项目。 # 更多的 mysql 配置项目可以通过以下命令获得。 docker run -it --rm mysql:5.7 --verbose --help > var.txt
3. 获得容器IP地址
docker inspect --format '{{ .NetworkSettings.IPAddress }}' mysql-server 172.17.0.2
4. 验证字符集
mysql -h 172.17.0.2 -uroot -p -e "show variables like '%char%';" +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
最后来总结下文章中的知识点
https://hub.docker.com/_/mysql/
--character-set-server
配置项设置默认字符集。
更多mysql配置项通过命令获得:docker run -it --rm mysql:5.7 --verbose --help
公众号回复 docker 获得文章专题
欢迎加入QQ群: 703906133
欢迎关注微信公众号: 运维录
本文分享自微信公众号 - 运维录(gh_70d95b8f5f7c),作者:东南
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2020-01-02
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句