docker run 无法指定MySQL字符集?

作者站长头像
站长
· 阅读数 7

Docker Hub MySQL中给了一个例子,说是可以在启动容器的时候指定字符集:

$ docker run \ 
    --name some-mysql \ 
    -e MYSQL_ROOT_PASSWORD=my-secret-pw \
    -d mysql:tag \
    --character-set-server=utf8mb4 \
    --collation-server=utf8mb4_unicode_ci

复制这个命令实际启动了一个容器,进去后看了下字符集好像没有变化:

$ show variables like '%char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | latin1                         |
| character_set_connection | latin1                         |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | latin1                         |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)

有大佬知道这是为什么吗?

回复
1个回答
avatar
test
2024-07-03

自定义配置文件可以实现。

在宿主机新建一个配置文件,文件名随意,后缀须为.cnf

$ vim character_set.cnf

拷贝以下内容粘贴至文件:

[mysqld]
character-set-server = utf8mb4
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4

保存并退出。

然后启动时将容器的/etc/mysql/conf.d挂载到该文件所在目录:

$ docker run \
    --name mysql \
    -v /path/to/cusotm:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=my-secret-pw \
    -d mysql:tag

启动后进入容器登录MySQL

$ show variables like '%char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.01 sec)

可以看到字符集已正确设置。


MySQL - 设置字符集

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容