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)
有大佬知道这是为什么吗?
回复
1个回答
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)
可以看到字符集已正确设置。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容