x80*_*486 3 database unicode character-encoding mariadb
我有以下DockerfileMariaDB 服务器的定义文件:
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"\nRun 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+--------------------+------------------+\nRun Code Online (Sandbox Code Playgroud)\n我的理解是,我拥有的设置:--character-set-server=utf8mb4和--collation-server=utf8mb4_unicode_ci是将字符集和排序规则设置为的正确设置UTF-8。
现在我的问题是:我如何摆脱该utf8mb3值character_set_system?它应该与其他值一起设置为utf8mb4\xe2\x80\x94 或者这就是我的想法;)
有任何线索如何正确设置吗?
\n\n\n我想避免使用任何配置文件(例如 ),
\nmy.cnf因为我正在使用没有任何修改的 Docker 镜像。
我在 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某人。