phpmyadmin导入报错因mysql 8.0+默认排序规则utf8mb4_0900_ai_ci与旧版不兼容,需手动替换为utf8mb4_unicode_ci并清理其他8.0+特有排序规则及json/生成列语法,大文件推荐用mysql命令行导入。
phpmyadmin 导入报错 unknown collation: 'utf8mb4_0900_ai_ci'
这是 mysql 8.0+ 默认字符集与旧版(如 5.7 或更早)不兼容的典型表现。新版本用 utf8mb4_0900_ai_ci 作默认排序规则,而旧 phpmyadmin 或低版本 mysql 不认识它。
直接改 SQL 文件最稳妥,别指望“兼容模式”开关能自动兜底:
- 用文本编辑器全局替换
utf8mb4_0900_ai_ci→utf8mb4_unicode_ci(MySQL 5.7+ 都支持) - 顺手把
CHARSET=utf8mb4后面带COLLATE的整段删掉或统一替换,避免残留其他 8.0+ 特有排序规则(如utf8mb4_0900_as_cs) - 如果备份里有
CREATE DATABASE语句,把其中的DEFAULT COLLATE也一并处理,否则建库就失败
导入时提示 #1064 - You have an error in your SQL syntax(尤其在 JSON 或 GENERATED COLUMN 附近)
MySQL 5.7 引入 JSON 类型,8.0 加强了语法支持,但旧版 phpMyAdmin 解析器可能卡在 JSON 字面量或生成列定义上。
别硬扛,绕过去:
- 打开备份 SQL 文件,删掉所有
JSON类型字段的STORED/VIRTUAL关键字(只留JSON) - 把
GENERATED ALWAYS AS (...)整行替换成普通字段 + 注释说明,导入后再手动补逻辑 - 若含
INSERT ... VALUES (JSON_OBJECT(...)),临时改成字符串形式插入,后续用UPDATE+JSON_SET()补数据
phpMyAdmin 界面上传失败:文件超限或无响应
不是配置错了,是 phpMyAdmin 本身对大文件和新语法容忍度低——它只是个 Web 封装层,底层还是靠 MySQL 客户端执行。
立即学习“PHP免费学习笔记(深入)”;
换命令行,省事又可控:
- 先用
mysql --version确认目标 MySQL 版本,再用对应客户端连接:mysql -u root -p database_name - 如果 SQL 文件含
USE database_name,去掉这行,改用命令行指定库名,避免跨库错误 - 加
--default-character-set=utf8mb4参数,防止客户端编码和服务器不一致导致乱码
导入后中文乱码或字段值被截断
表面是字符集问题,根子常在连接层没对齐。phpMyAdmin 页面顶部显示的“服务器连接字符集”未必真实生效。
关键检查点:
- 执行
SHOW VARIABLES LIKE 'character_set%';,重点看character_set_client、character_set_connection、character_set_results是否全为utf8mb4 - 在导入前手动执行
SET NAMES utf8mb4;(命令行或 phpMyAdmin 的“SQL”页粘贴运行) - 表字段定义里如果还有
CHARSET=utf8,得进 phpMyAdmin 表结构页逐个改,utf8在 MySQL 8.0 已是别名,实际映射到utf8mb3,存不下 emoji
字符集不是设一次就完事,客户端、连接、服务端、表、字段五层都得对得上。漏一层,后面查半天。











