phpMyAdmin 是导入 SQL 文件最稳妥方式,需确保服务运行、编码选 utf8mb4;大文件改用 mysql 命令行,注意路径、权限与编码;预处理过滤危险语句;检查严格模式与时区避免数据异常。
本地 PHP 环境(如 XAMPP、WAMP、MAMP)自带的 phpMyAdmin 是导入 SQL 文件的首选方式,界面直观、容错较强,尤其适合含 CREATE DATABASE 或多表结构的 .sql 文件。
操作前确认:mysqld 服务已启动,phpMyAdmin 可正常访问(通常是 http://localhost/phpmyadmin)。
xxx.sql
utf8mb4(不是 utf8),避免中文乱码
NONE),除非你明确知道要适配某旧版 MySQLmax_upload_size 限制,见下一条phpMyAdmin 默认限制上传大小(通常 2MB),遇到几十 MB 的导出文件会直接报错:Missing boundary in multipart data 或页面空白。此时必须绕过 Web 层,用终端执行 mysql 命令。
关键点:路径、权限、字符集三者必须对齐。
bin 目录已加入系统 PATH(XAMPP 用户常用路径是 C:\xampp\mysql\bin 或 /Applications/XAMPP/xamppfiles/bin)mysql -u root -p database_name < dump.sql
ERROR 1064 或乱码,大概率是文件编码不对——用文本编辑器(如 VS Code)另存为 UTF-8 without BOM
mysql -u root -p -e "CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
部分导出的 SQL 文件(尤其从生产环境或某些 CMS 备份工具生成)会硬编码 DATA DIRECTORY、TABLESPACE 或写死 localhost:3306,这类语句在本地 MySQL 会直接报错,中断导入。
不要试图手动删光所有可疑行——容易漏掉或破坏语法。更可靠的做法是预处理:
sed(macOS/Linux)或 findstr /v(Windows PowerShell)过滤掉危险语句:sed '/DATA DIRECTORY\|TABLESPACE\|DEFINER=/d' dump.sql > clean.sql

DEFINER=`[^`]+`@`[^`]+` → 空(正则模式开启)CREATE USER 或 GRANT ——本地一般用 root 就够了即使导入过程没报错,也可能出现「表存在但查不到数据」「时间字段全为 0000-00-00 00:00:00」等问题。根源常是 MySQL 配置差异。
mysql -u root -p -e "SELECT @@sql_mode;"若含
STRICT_TRANS_TABLES,某些非法日期/空字符串会被拒绝插入mysql -u root -p -e "SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';"
SYSTEM(即服务器本地时间),而导出文件用的是 UTC。可在导入后执行:SET time_zone = '+00:00';再查数据验证
mysql 命令的错误信息非常具体,比如 ERROR 1146 (42S02): Table 'xxx' doesn't exist,说明 SQL 文件依赖顺序错了;ERROR 1062 (23000): Duplicate entry 则意味着目标库已有数据。这些都不是“导入失败”,而是需要你判断是否清空旧表或加 DROP TABLE IF EXISTS。