Mysql容器设置字符集
2016-11-03 by dongnan
问题描述
使用 docker
创建一个 mysql
容器实例,发现在某些场景下会遇到查询结果乱码。
这是因为创建的 mysql容器默认使用 latin1字符集,为了修正乱码问题需要设置 utf8
字符集。
环境描述
当前字符集
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)
软件版本
容器镜像: mysql:5.7
容器系统: debian 8 (jessie)
Docker主机: Ubuntu Server 16.04
解决方法
mysql
提供了一些环境变量和配置项目,用于调整 mysql容器实例的配置参数。
要解决上述问题,可以在创建容器时指定mysql
实例使用的字符集选项。
创建 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
。
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
获得容器IP地址
docker inspect --format 'pw_ .NetworkSettings.IPAddress ' mysql-server
172.17.0.2
验证字符集
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/ |
+--------------------------+----------------------------+
小结
最后来总结下文章中的知识点
- 通过设置 mysql容器环境变量,创建数据库、设置账户与密码等信息。
- 通过设置
--character-set-server
配置项设置默认字符集。 - 更多的
mysql
配置项目可以通过以下命令获得:docker run -it --rm mysql:5.7 --verbose --help