从MySQL 8.0导出的SQL文件,导入旧MySQL或部分兼容数据库时,可能报Unknown collation: utf8mb4_0900_ai_ci。这不是文件编码名字拼错,而是目标服务不认识源端使用的排序规则。
先确认源端和目标端版本,不能随意全文替换后直接上线。

为什么会出现0900排序规则
MySQL官方文档说明,MySQL 8.0把utf8mb4_0900_ai_ci设为utf8mb4的默认排序规则,而MySQL 5.7的默认值不同。新建库、表或列若未显式指定排序规则,可能自动继承该默认值。
字符集都是utf8mb4,不代表排序和比较语义完全相同。
检查哪些对象使用了它
在源库查看服务器、数据库、表和列的字符集及排序规则,并搜索导出文件中的COLLATE声明。目标端可用SHOW COLLATION WHERE Charset = 'utf8mb4';确认实际支持列表。
不要只替换CREATE DATABASE中的一处。表、列和连接级设置也可能继续引用不支持的规则。
选择兼容规则要考虑什么
迁移到不支持0900规则的目标时,需要从目标支持的utf8mb4排序规则中选择,并评估大小写、重音、语言字符和唯一索引行为。常见规则名称相似,也可能在字符比较顺序上产生差异。
排序规则变化可能改变查询顺序和唯一性判断。不能把导入成功当作数据语义无变化。
安全迁移的操作顺序
先备份源库,在测试副本生成兼容导出或明确修改对象排序规则,再导入目标环境。对关键文本列执行代表性比较、排序和唯一约束测试。可使用萤光云或LightNode的独立VPS搭建同版本目标库预演。
大表执行字符集或排序规则转换可能重建数据并占用较长时间。生产变更要安排空间和维护窗口。
导入后如何验收
核对表和列的实际排序规则、行数、校验数据与应用查询,重点测试登录名、邮箱、国际化文本及唯一索引。确认目标数据库连接参数不会再次覆盖为意外规则。
验收标准是结构完整、数据可读、比较与排序符合业务预期,应用写入也不再报错。
FAQ
问:直接替换成utf8mb4_general_ci可以吗?答:它可能可导入,但排序语义不同,应以目标支持列表和业务测试决定。
问:升级目标MySQL能避免替换吗?答:目标支持该排序规则后可保留,但仍需评估升级兼容性与维护成本。
温馨提示
温馨提示:数据库迁移要把字符集和排序规则作为独立检查项,保留原始导出与测试记录,避免不可逆覆盖。


