修改Docker MySQL官方镜像字符集UTF8

通过MySQL提供的官方镜像启动MySQL

docker run -p 0.0.0.0:3306:3306 -e MYSQL_ROOT_PASSWORD=toor -d mysql:5.7

参数

  • -d 开启 deamon模式
  • -p port 映射端口内部本地3306到容器的3306
  • -e environment 设置密码 toor

编码问题

采用默认的 MySQL Docker 官方镜像启动的MySQL字符编码都是latin1:
默认编码

解决办法

方法一:添加启动命令
docker run -e MYSQL_ROOT_PASSWORD=toor -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

但是很遗憾,我这里添加这两个命令后仍然没有能完全奏效:
字符编码

方法二:修改my.cnf

这里有一个比较难受的地方,你可以通过docker exec -it {容器ID} /bin/bash 进入到容器中,修改my.cnf进行相关配置的修改。

但是,my.cnf修改完成后必须要重启MySQL,然而MySQL官方的docker镜像是以mysql进程为deamon的,MySQL一旦停止,这个Docker 容器会立马挂掉。再次启动,则又是以前的配置。

因此只能基于MySQL的官方镜像,重新构建一个加载了字符编码配置的镜像。

这里我们使用dockerfile

一、首先,编写一个配置文件
vi my.cnf
# 输入以下内容:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server=utf8_general_ci
character-set-server=utf8
init-connect='SET NAMES utf8'

# 保存退出
:wq
二、编写Dockerfile
vi Dockerfile
# 输入以下内容:
from mysql:5.7
COPY my.cnf /etc/mysql/conf.d/mysqlutf8.cnf
CMD ["mysqld", "--character-set-server=utf8", "--collation-server=utf8_unicode_ci"]
三、通过Dockerfile构建Docker镜像
docker build -t mysqlutf8 .

注意最后一个 . 别忘了

四、通过刚构建出的镜像启动MySQL
docker run -p 0.0.0.0:3306:3306 -e MYSQL_ROOT_PASSWORD=toor -d mysqlutf8:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

启动后再进入MySQL查看字符集
字符编码

其他

这里的utf8mb4utf8差别不大。因为一些历史遗留问题,导致mysql当中的utf8并不是通用标准的utf8,在极少数情况下会出现编码不统一的问题 utf8mb4才是MySQL中提供的通用utf8编码标准,严谨起见,建议在MySQL中统一设置为utf8mb4

参考资料
  1. http://xy.uyun.cn/post/1631.html
  2. https://www.linyuting.cn/gerenrizhi/docker-charset-utf8.html
  3. https://github.com/ibusybox/mysqlutf8
  4. https://github.com/dnhsoft/docker-mysql-utf8
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值