在MariaDB服务器中设置UTF-8会忽略character_set_system

x80*_*486 3 database unicode character-encoding mariadb

我有以下DockerfileMariaDB 服务器的定义文件:

\n
version: "3.8"\n\n...\n\nservices:\n  database:\n    command: ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]\n    container_name: mariadb\n    environment:\n      MARIADB_DATABASE: sample_database\n      MARIADB_INITDB_SKIP_TZINFO: "true"\n      MARIADB_PASSWORD_FILE: /run/secrets/mariadb_user_password\n      MARIADB_ROOT_PASSWORD_FILE: /run/secrets/root_user_password\n      MARIADB_USER: mariadb\n      TZ: "Etc/UTC" # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\n    image: docker.io/library/mariadb:10.6-focal # https://hub.docker.com/_/mariadb/\n    networks:\n      - global-network\n    ports:\n      - "3306:3306"\n    restart: on-failure\n    secrets:\n      - mariadb_user_password\n      - root_user_password\n    stdin_open: true\n    tty: true\n    volumes:\n      - "database-volume:/var/lib/mysql"\n
Run Code Online (Sandbox Code Playgroud)\n

我不太熟悉这个主题,但如果我想检查服务器使用的字符和排序规则集,我通常会执行这些查询:

\n
> show variables like \'char%\';\n+------------------------+--------------------------+\n|Variable_name           |Value                     |\n+------------------------+--------------------------+\n|character_set_client    |utf8mb4                   |\n|character_set_connection|utf8mb4                   |\n|character_set_database  |utf8mb4                   |\n|character_set_filesystem|binary                    |\n|character_set_results   |utf8mb4                   |\n|character_set_server    |utf8mb4                   |\n|character_set_system    |utf8mb3                   |\n|character_sets_dir      |/usr/share/mysql/charsets/|\n+------------------------+--------------------------+\n\n\n> show variables like \'collation%\';\n+--------------------+------------------+\n|Variable_name       |Value             |\n+--------------------+------------------+\n|collation_connection|utf8mb4_unicode_ci|\n|collation_database  |utf8mb4_unicode_ci|\n|collation_server    |utf8mb4_unicode_ci|\n+--------------------+------------------+\n
Run Code Online (Sandbox Code Playgroud)\n

我的理解是,我拥有的设置:--character-set-server=utf8mb4--collation-server=utf8mb4_unicode_ci是将字符集和排序规则设置为的正确设置UTF-8

\n

现在我的问题是:我如何摆脱该utf8mb3character_set_system?它应该与其他值一起设置为utf8mb4\xe2\x80\x94 或者这就是我的想法;)

\n

有任何线索如何正确设置吗?

\n
\n

我想避免使用任何配置文件(例如 ),my.cnf因为我正在使用没有任何修改的 Docker 镜像。

\n
\n

Cri*_*scu 5

我在 MariaDB 10.6.5 中遇到类似的问题,我试图从 AWS 加载转储并遇到此错误:

ERROR 1253 (42000) at line 26: COLLATION 'utf8mb3_general_ci' is not valid for CHARACTER SET 'utf8mb4'
Run Code Online (Sandbox Code Playgroud)

我的配置如下:

MariaDB [(none)]> 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/ |
+--------------------------+----------------------------+
Run Code Online (Sandbox Code Playgroud)

根据此页面https://mariadb.com/kb/en/old-mode/我必须设置old-mode为空/etc/mysql/mariadb.conf.d/50-server.cnf

旧模式=

因此它从

MariaDB [(none)]> SHOW VARIABLES LIKE '%old%';
+------------------------------------------+-----------------+
| Variable_name                            | Value           |
+------------------------------------------+-----------------+
| old_mode                                 | UTF8_IS_UTF8MB3 |
+--------------------------+---------------------------------+
Run Code Online (Sandbox Code Playgroud)

MariaDB [(none)]> SHOW VARIABLES LIKE '%old%';
+------------------------------------------+-----------------+
| Variable_name                            | Value           |
+------------------------------------------+-----------------+
| old_mode                                 |                 |
+--------------------------+---------------------------------+
Run Code Online (Sandbox Code Playgroud)

character_set_system因此,即使仍然显示,我也设法加载 SQL 转储utf8mb3

HTH某人。