【发布时间】:2021-05-25 23:02:31
【问题描述】:
我有以下 Dockerfile MariaDB 服务器的定义文件:
version: "3.8"
...
services:
database:
command: ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
container_name: mariadb
environment:
MARIADB_DATABASE: sample_database
MARIADB_INITDB_SKIP_TZINFO: "true"
MARIADB_PASSWORD_FILE: /run/secrets/mariadb_user_password
MARIADB_ROOT_PASSWORD_FILE: /run/secrets/root_user_password
MARIADB_USER: mariadb
TZ: "Etc/UTC" # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
image: docker.io/library/mariadb:10.6-focal # https://hub.docker.com/_/mariadb/
networks:
- global-network
ports:
- "3306:3306"
restart: on-failure
secrets:
- mariadb_user_password
- root_user_password
stdin_open: true
tty: true
volumes:
- "database-volume:/var/lib/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/charsets/|
+------------------------+--------------------------+
> show variables like 'collation%';
+--------------------+------------------+
|Variable_name |Value |
+--------------------+------------------+
|collation_connection|utf8mb4_unicode_ci|
|collation_database |utf8mb4_unicode_ci|
|collation_server |utf8mb4_unicode_ci|
+--------------------+------------------+
我的理解是我拥有的设置:--character-set-server=utf8mb4 和 --collation-server=utf8mb4_unicode_ci 是正确的设置,字符集和排序规则都设置为UTF-8。
现在我的问题是:如何摆脱 utf8mb3 的 character_set_system 值?它应该与其他值一起设置为utf8mb4——或者这就是我的想法;)
任何线索如何正确设置?
我想避免使用任何配置文件(如
my.cnf),因为我使用的是未进行任何修改的库存 Docker 映像。
【问题讨论】:
-
您通常可以卷挂载 cnf 文件,但请注意我应该更正的 this issue。来自文档character_set_system 是一个固定值,但这个固定值可能在the recent server changes 中发生了变化。
-
我认为这就是原因(最后一个链接):
utf8字符集(和相关排序规则)现在默认是utf8mb3的别名,而不是相反我>。因为character_set_system的值是固定的,并且始终是utf8,所以现在它显示为utf8mb3。如果您想这样写您的评论,我会接受您的回答。
标签: database unicode character-encoding mariadb