修改Docker MySQL官方镜像字符集UTF8
通过MySQL提供的官方镜像启动MySQLdocker 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提供的官方镜像启动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查看字符集
其他
这里的utf8mb4
和utf8
差别不大。因为一些历史遗留问题,导致mysql当中的utf8
并不是通用标准的utf8
,在极少数情况下会出现编码不统一的问题 utf8mb4
才是MySQL中提供的通用utf8
编码标准,严谨起见,建议在MySQL中统一设置为utf8mb4
参考资料
更多推荐
已为社区贡献1条内容
所有评论(0)