MariaDB 10.6使用mysql_install_db初始化系统库字符集排序规则异常如何解决
问题原因说明
MariaDB 10.6 版本开始,默认utf8别名指向utf8mb3,你遇到的初始化系统库字符集不生效、手动建库指定utf8mb4仍为utf8mb3的问题,核心是两个原因:
- Windows 版本的
mysql_install_db.exe已被官方弃用,本身不支持动态读取指定配置文件,默认使用内置的字符集参数创建系统库 - 你之前用
mariadbd.exe初始化时使用了相对路径指定配置文件,Windows 版本的 MariaDB 会忽略相对路径的--defaults-file参数,导致配置没有生效
解决方案
方案一:重新初始化(推荐,无残留问题)
- 先清空之前创建的
datadir目录所有内容 - 调整
my.cnf配置,补全系统库初始化相关的字符集参数:
[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] port = 8137 # 基础字符集配置 character-set-server = utf8mb4 collation-server = utf8mb4_general_ci init_connect='SET NAMES utf8mb4' character-set-client-handshake = FALSE # 强制指定数据库级别默认字符集,控制系统库初始化配置 character_set_database = utf8mb4 collation_database = utf8mb4_general_ci # 禁用utf8mb3作为默认utf8别名 old_mode=
- 使用绝对路径执行初始化命令,替换为你本地实际的文件路径:
# 示例路径,替换为你本地的实际路径 C:\Service\Tools\mariadb-winx64\bin\mariadbd.exe --defaults-file=C:\Service\Tools\my.cnf --initialize-insecure --datadir=C:\Service\Tools\mariadb-data
- 初始化完成后注册服务、启动,执行以下命令验证参数是否生效:
show global variables like '%char%'; show global variables like '%collation%';
此时再执行建库语句,即可正常使用指定的utf8mb4字符集。
方案二:不重新初始化,手动修改现有系统库字符集
如果不想重新部署现有服务,可以直接批量修改系统库和表的字符集:
- 修改系统库默认字符集:
ALTER DATABASE mysql CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci; ALTER DATABASE information_schema CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci; ALTER DATABASE performance_schema CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
- 批量生成
mysql库下所有表的字符集修改语句,执行以下SQL后复制输出结果,再执行即可完成所有系统表的字符集转换:
SELECT CONCAT('ALTER TABLE `', table_name, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;') AS modify_sql FROM information_schema.tables WHERE table_schema = 'mysql' AND table_type = 'BASE TABLE';
内容的提问来源于stack exchange,提问作者Niels
相关产品推荐
相关产品推荐

