docker run 无法指定MySQL字符集?

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)

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

阅读 2k
1 个回答

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

在宿主机新建一个配置文件,文件名随意,后缀须为.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 - 设置字符集

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题