报错“unknown collation: 'utf8mb4_0900_ai_ci'”说明目标mariadb不支持该mysql 8.0专属排序规则,需将sql文件中所有utf8mb4_0900_ai_ci替换为utf8mb4_unicode_ci或utf8mb4_general_ci,并检查comment、index等隐含位置;若提示“unknown character set: 'utf8mb4'”,则需确认character_sets_dir下存在utf8mb4.xml、修改index.xml注册字符集并重启服务,同时配置character-set-server=utf8mb4确保建库默认使用。
navicat还原mariadb时遇到字符集冲突,本质是mysql与mariadb对utf8mb4相关特性的实现不一致——不是navicat配置错了,而是sql文件里写的字符集/排序规则,目标mariadb压根不认识。
还原报错“Unknown collation: 'utf8mb4_0900_ai_ci'”怎么办
这是从MySQL 8.0导出的SQL被导入MariaDB 10.5及更早版本时最典型的错误。utf8mb4_0900_ai_ci是MySQL 8.0专属排序规则,MariaDB不支持。
- 打开导出的.sql文件,全局搜索
utf8mb4_0900_ai_ci,全部替换成utf8mb4_unicode_ci(兼容性好,推荐)或utf8mb4_general_ci(性能略高,但排序精度稍低) - 别只改CREATE TABLE里的COLLATE,还要检查COMMENT、INDEX、PARTITION等语句中是否隐含该排序规则
- 如果表里有FULLTEXT索引,MariaDB对utf8mb4_0900_ai_ci的全文解析逻辑完全不同,替换后需手动验证检索行为是否符合预期
还原时提示“Unknown character set: 'utf8mb4'”
这说明目标MariaDB实例根本没加载utf8mb4字符集支持,常见于精简版镜像、老旧系统或手动编译未启用完整字符集的安装包。
- 先执行
SHOW CHARACTER SET LIKE 'utf8mb4';确认是否返回结果;若为空,说明服务端未注册该字符集 - 查
character_sets_dir路径:SHOW VARIABLES LIKE 'character_sets_dir';,进该目录看是否存在utf8mb4.xml - 若缺失,可复制
utf8.xml重命名为utf8mb4.xml,再编辑其中<charset name="utf8mb4"></charset>和所有id值(必须全局唯一,查现有最大id后+1),并在Index.xml末尾加一行:<collation name="utf8mb4_general_ci" id="45" charset="utf8mb4"></collation> - 改完必须重启MariaDB:
sudo systemctl restart mariadb,否则不生效
Navicat连接里设utf8mb4却仍乱码或建库失败
连接参数里的字符集设置只影响客户端协商,不改变服务端默认行为。还原时新建数据库若没显式指定CHARSET,就完全依赖character_set_server全局变量。
- 执行
SHOW VARIABLES LIKE 'character_set_server';,如果不是utf8mb4,必须修改配置文件(如/etc/my.cnf.d/server.cnf),在[mysqld]下加:character-set-server = utf8mb4和collation-server = utf8mb4_unicode_ci - 仅执行
SET GLOBAL character_set_server = utf8mb4;无效——它不持久,且Navicat新连接不会自动继承 - 还原前务必用
CREATE DATABASE xxx CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;显式建库,避免依赖全局变量 - Navicat「运行SQL文件」时勾选「使用当前连接的字符集」,确保客户端发送的SQL字节流不被中间转码
真正容易被忽略的是:MariaDB对DEFAULT CHARSET=utf8mb4的解析比MySQL更严格,哪怕SQL文件里多一个空格或换行符,都可能触发字符集注册失败。建议用iconv -f utf-8 -t utf-8//IGNORE预处理SQL文件,再导入。











