phpMyAdmin默认导出并非固定适配MySQL 8.0,而是依据当前服务端版本或手动设置的语法兼容性模式;若误选MYSQL40或目标库实际为5.7/5.6却按8.0导入,会导致utf8mb4_0900_as_cs、JSON类型、DEFINER等报错。

直接说结论:phpMyAdmin 默认导出的 SQL 就是 MySQL 8.0 兼容的,根本不用“适配”——你真正要防的是它**意外导出低版本兼容格式**,或者被你手动选错设置导致丢失 8.0 特性。
为什么导出后在 MySQL 8.0 上执行报错?
常见现象不是“不兼容 8.0”,而是:Unknown collation: 'utf8mb4_0900_as_cs'、JSON column type is not supported、或触发器里出现 DEFINER=`user`@`host` 报权限错误。这些都不是 phpMyAdmin 导出的问题,而是你导出时误设了向下兼容模式,或者目标库实际是 5.7/5.6 却当成 8.0 用。
关键点:
- phpMyAdmin 的「语法兼容性」下拉菜单默认是
MYSQL40或自动识别当前服务端版本,不是固定按 8.0;如果你没动过,大概率导出的是基础语法(不含 JSON、窗口函数注释等) - MySQL 8.0 默认启用
sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,而导出文件若没带SET SQL_MODE,导入时可能因模式差异插入失败 - 排序规则
utf8mb4_0900_as_cs是 8.0+ 独占,但只有当你显式创建了用该规则的列/库,它才会出现在导出 SQL 中——不是 phpMyAdmin 加的,是你库本身带的
导出前必须确认的三项设置
进入 phpMyAdmin → 右上角「设置」→「导出」→「格式」选项卡,检查以下三项:
立即学习“PHP免费学习笔记(深入)”;
-
语法兼容性:必须是
DEFAULT(即跟随当前 MySQL 服务端版本),不是MYSQL40或MYSQL323;选错会导致 JSON、CTE 注释、GENERATED COLUMN被降级或删掉 -
添加 SET SQL_MODE 语句:务必勾选——它会插入
SET SQL_MODE = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION',避免因模式差异导致数据截断或插入失败 -
对象创建选项 → 添加 DEFINER 和 SQL SECURITY:如果目标环境用户权限受限(比如共享主机、Docker 容器无 SUPER 权限),建议取消勾选;否则导入时会因
DEFINER不匹配报错
导出后发现 SQL 里有不想要的 8.0 特性怎么办?
别重导,先开编辑器快速扫一眼。高频问题及处理方式:
-
utf8mb4_0900_as_cs或utf8mb4_0900_ai_ci排序规则:全局替换为utf8mb4_unicode_ci(兼容 5.7+)或utf8mb4_general_ci(兼容 5.5+) -
JSON DEFAULT (JSON_OBJECT())这类定义:若目标库低于 5.7,只能手动改成TEXT DEFAULT NULL并补应用层逻辑 -
/*!80013 ... */这类 MySQL 8.0+ 专属注释:正则替换/\/\*!8[0-9]{3}[^*]*\*\//g→ 空,避免解析器误判 -
ROW_FORMAT=DYNAMIC报错:不是 8.0 特性,但某些老配置禁用innodb_file_format,删掉整段即可,InnoDB 会自动选默认格式
最易被忽略的一点:导出文件开头的 CREATE DATABASE ... CHARSET=utf8mb4 COLLATE=utf8mb4_0900_as_cs ——这个语句如果目标库不支持该排序规则,整个导入会卡在第一步。必须提前改掉,不能只改表级 COLLATE。



















