首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >为什么Docker创建的MySQL容器字符乱码?

为什么Docker创建的MySQL容器字符乱码?

作者头像
用户1560186
发布于 2020-01-15 08:05:50
发布于 2020-01-15 08:05:50
2.8K00
代码可运行
举报
文章被收录于专栏:运维录运维录
运行总次数:0
代码可运行
《复仇者联盟4:终局之战》钢铁侠打响指后,灭霸军团湮灭。
问题描述

这篇文章发布于 2016.11.03 ,记录如何解决 mysql容器查询结果乱码的问题。

使用 docker 创建一个 mysql容器实例,发现在某些场景下会遇到查询结果乱码

这是因为创建的 mysql容器默认使用 latin1字符集,为了修正乱码问题需要设置 utf8 字符集。

环境描述

1. 当前字符集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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. 版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
容器镜像: mysql:5.7
容器系统: debian 8 (jessie)
Docker主机: Ubuntu Server 16.04
解决方法

mysql 提供了一些环境变量和配置项目用于调整 mysql容器实例的配置参数。要解决上述问题,可以在创建容器时指定mysql实例使用的字符集选项。

1. 创建 mysql容器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 变量&参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'环境变量':
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地址

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker inspect --format '{{ .NetworkSettings.IPAddress }}' mysql-server

172.17.0.2

4. 验证字符集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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容器环境变量,创建数据库、设置账户与密码等信息。 更多 mysql容器环境变量请参考: https://hub.docker.com/_/mysql/
  • 通过设置--character-set-server配置项设置默认字符集。 更多mysql配置项通过命令获得:docker run -it --rm mysql:5.7 --verbose --help

公众号回复 docker 获得文章专题

欢迎加入QQ群: 703906133

欢迎关注微信公众号: 运维

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL关于character_set 设置为uft8问题
在显示 utf8中文数据时会乱码,但是你用cmd告诉MySQL服务器器我使用的是GBK,你要给我返回GBK数据就可以正常显示了,如下图。这也是为什么PHP,Java,Python等编程连接数据库时都要指定数据库的结果集。
酒馆丁老师
2020/09/08
12.6K0
MySQL关于character_set 设置为uft8问题
MySQL的几个character_set变量的说明
参考: http://www.th7.cn/db/mysql/201412/84636.shtml
保持热爱奔赴山海
2019/09/18
2.9K0
MySQL的几个character_set变量的说明
mysql操作命令梳理(4)-中文乱码问题
在平时的mysql运维操作中,经常会碰到插入中文字段后出现乱码的情况,产生中文乱码的原因一般有: 1)mysql的编码格式不对,是latin1编码。强烈推荐将mysql下的编码格式都改为utf8,因为它兼容世界上所有字符! 2)mysql的表的语系设定问题(包含character与collation) 3)客户端程式(例如php)的连线语系设定问题
全栈程序员站长
2022/07/19
1.5K0
Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)
昨天在CentOS 7上遇到MySQL 5.6遇到乱码问题,特此总结一下: 一、登录MySQL,用SHOW VARIABLES LIKE ‘character%’;查看下字符集,显示如下:
九州暮云
2019/08/21
2.9K0
Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)
专治 MySQL 乱码, 再也不想看到乱码了!
MySQL出现乱码的原因有很多,一般与character_set参数有关。我们先来看看有哪些参数:
Bug开发工程师
2020/03/11
3.6K0
【问题解决】MySQL修改字符编码解决中文乱码问题
前言 什么是字符编码,为什么会乱码? https://zh.wikipedia.org/wiki/%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81 mysql database字符编码默认是latin1,并不支持中文 本篇文章解决办法适用范围? Linux下的mysql 5.6+版本 其他版本未尝试过,不敢保证可行 解决步骤 查看mysql目前字符编码 #登录mysql mysql -u rrot -p #在mysql中查询字符编码设置 mysql> show variables
KenTalk
2018/09/11
1.5K0
深入理解MySQL字符集及校对规则(一)
在日常处理客户的问题中,会遇到非常多的客户反馈字符乱码的问题,遇到这类型的问题,我们要怎么去处理呢?又该怎么去引导用户去解决呢?
SEian.G
2021/03/03
1.7K0
mysql存储emoji问题
前一段时间,项目中需要在数据库中存储emoji,由于编码格式不对,直接导致数据库报错,后来修改mysql的编码,就解决了
lin_zone
2018/08/15
9400
修改及查看mysql数据库的字符集
Liunx下修改MySQL字符集: 1.查找MySQL的cnf文件的位置 find / -iname ‘*.cnf’ -print /usr/share/mysql/my-innodb-heavy-4G.cnf /usr/share/mysql/my-large.cnf /usr/share/mysql/my-small.cnf /usr/share/mysql/my-medium.cnf /usr/share/mysql/my-huge.cnf /usr/share/texmf/web2c/texmf.c
小小科
2018/05/02
4.6K0
MySql修改数据库编码为UTF8避免造成乱码问题--Java学习网
mysql 创建数据库时指定编码很重要,很多开发者都使用了默认编码,乱码问题可是防不胜防。制定数据库的编码可以很大程度上避免倒入导出带来的乱码问题。 网页数据一般采用UTF8编码,而数据库默认为latin 。我们可以通过修改数据库默认编码方式为UTF8来减少数据库创建时的设置,也能最大限度的避免因粗心造成的乱码问题。 我们遵循的标准是,数据库,表,字段和页面或文本的编码要统一起来 我们可以通过命令查看数据库当前编码:mysql> SHOW VARIABLES LIKE 'character%'; 发现很多对应的都是 latin1,我们的目标就是在下次使用此命令时latin1能被UTF8取代。 第一阶段: mysql设置编码命令
用户1289394
2021/07/09
1.8K0
MySQL中涉及的几个字符集
character-set-server/default-character-set:服务器字符集,默认情况下所采用的。 character-set-database:数据库字符集。 character-set-table:数据库表字符集。 优先级依次增加。所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集。 character-set-client:客户端的字符集。客户端默认字符集。当客户端向服务器发送请求时,请求以该字符集进行编码。 character-set-results:结果字符集。服务器向客户端返回结果或者信息时,结果以该字符集进行编码。 在客户端,如果没有定义character-set-results,则采用character-set-client字符集作为默认的字符集。所以只需要设置character-set-client字符集。
Java架构师必看
2021/05/20
1.5K0
Linux 安装配置MariaDB
[root@dbServer ~]# yum install -y mariadb mariadb-server 已加载插件:fastestmirror Loading mirror speeds from cached hostfile  * base: mirrors.aliyun.com  * extras: mirrors.aliyun.com  * updates: mirrors.aliyun.com ........  ----------------------------------------------------------------------------------------------------------------------- 总计                                                                                                                                         1.8 MB/s |  20 MB  00:00:11      Running transaction check Running transaction test Transaction test succeeded Running transaction   正在安装    : 1:mariadb-libs-5.5.52-1.el7.x86_64                                                                                                                       1/4   正在安装    : perl-DBD-MySQL-4.023-5.el7.x86_64                                                                                                                        2/4   正在安装    : 1:mariadb-5.5.52-1.el7.x86_64                                                                                                                            3/4   正在安装    : 1:mariadb-server-5.5.52-1.el7.x86_64                                                                                                                     4/4   验证中      : 1:mariadb-server-5.5.52-1.el7.x86_64                                                                                                                     1/4   验证中      : perl-DBD-MySQL-4.023-5.el7.x86_64                                                                                                                        2/4   验证中      : 1:mariadb-5.5.52-1.el7.x86_64                                                                                                                            3/4   验证中      : 1:mariadb-libs-5.5.52-1.el7.x86_64                                                                                                                       4/4 已安装:   mariadb.x86_64 1:5.5.52-1.el7                        
程裕强
2022/05/06
1.1K0
jdk,tomcat,mysql安装步骤
​ tar -zxvf apache-tomcat-7.0.82.tar.gz -C /export/install/
用户4870038
2021/02/05
1K0
jdk,tomcat,mysql安装步骤
MySQL字符集乱码
版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处。 https://blog.csdn.net/robinson_0612/article/details/91175314
Leshami
2019/06/14
7.4K0
mysql命令行修改字符编码
1、修改数据库字符编码 mysql> alter database mydb character set utf8 ; 2、创建数据库时,指定数据库的字符编码 mysql> create database mydb character set utf8 ; 3、查看mysql数据库的字符编码 mysql> show variables like 'character%'; //查询当前mysql数据库的所有属性的字符编码 +--------------------------+---------------
程序员同行者
2018/06/22
3.7K0
Ubuntu18.04(linux)安装MySQL
Ubuntu18.04 安装mysql或者mariadb之后,发现普通用户和远程都没有权限连接。
Ryan-Miao
2018/08/01
9950
当你遇到Error: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value:
Error: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value: ‘\xE6\x88\x91\xE4\xBB\xAC…’ for column ‘content’ at row 1
马克社区
2022/08/08
9200
深入理解MySQL字符集及校对规则(二)
上一篇呢,从理论上介绍了MYSQL字符集和校对规则是什么以及如何正确的使用字符集;关于第一部分的内容可参考:深入理解MySQL字符集及校对规则(一)
SEian.G
2021/03/03
2.2K0
CentOS 6/7系统更改Mysql 5.7的默认字符集编码为utf8
查看当前字符集编码 [root@localhost ~]# mysql -uroot -p123qqq...A ... mysql> show variables like '%char%'; +--------------------------------------+----------------------------+ | Variable_name | Value | +------------------
非著名运维
2022/06/22
1.9K0
MYSQL高级篇----简介介绍
MySQL配置文件讲解:https://www.cnblogs.com/gaoyuechen/p/10273102.html
默 语
2024/11/20
1110
MYSQL高级篇----简介介绍
相关推荐
MySQL关于character_set 设置为uft8问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验