<p>必须先选中目标数据库,否则报#1046 - No database selected错误;phpMyAdmin不会自动识别SQL文件中的USE或CREATE DATABASE语句,只向当前高亮数据库执行SQL,正确操作是先点击左侧数据库名确保其高亮并显示在顶部导航栏,再进入Import页导入。</p>
必须先选中目标数据库,否则报 #1046 - No database selected
这个错误不是文件问题,而是操作顺序错了。phpmyadmin 不会自动识别 sql 文件里的 use `dbname`; 或 create database 语句——它只往当前高亮的数据库里执行所有 sql。如果你直接点「导入」没点左侧数据库名,就必然失败。
正确动作链:
→ 在左侧数据库列表中点击你要导入的目标库(比如 myapp_db),确保顶部导航栏显示 myapp_db »
→ 再点上方的 Import 标签页
→ 确认右上角「Format」是 SQL,且「SQL compatibility mode」保持空(除非你导出时特意设了 MYSQL40 等)
常见误操作:
• 先点 Import,再在页面里输库名(无效)
• 上传文件后才去左侧点库(已晚,导入按钮不响应)
• 用压缩包(.zip)但没勾选「Uncompress」选项(文件解不开)
中文乱码?检查 SQL 文件和 phpMyAdmin 字符集是否都是 utf8mb4
导入后中文变问号、方块或乱码,90% 是编码不一致导致的。phpMyAdmin 的字符集设置和 SQL 文件实际编码必须同为 utf8mb4,不能只写 utf8(MySQL 的 utf8 实际只支持 BMP 平面字符,不兼容 emoji 和部分生僻汉字)。
操作要点:
• 导入页面底部「Character set of the file」下拉框必须选 utf8mb4
• SQL 文件本身得是 utf8mb4 编码保存(可用 VS Code、Notepad++ 查看并转存)
• 如果 SQL 文件开头有 SET NAMES utf8,建议手动替换成 SET NAMES utf8mb4,否则可能被覆盖
• 数据库和表的默认字符集也应是 utf8mb4_unicode_ci(建库时选,或后续用 ALTER DATABASE 修改)
立即学习“PHP免费学习笔记(深入)”;
文件大于 2MB 就卡住或空白?别硬扛,改配置或换命令行
phpMyAdmin 默认上传限制通常为 2MB,超限后表现是:页面无反应、进度条不动、提示 Script timeout 或直接白屏。根本原因不在界面,而在 MySQL 和 PHP 两层限制同时被触发。
若必须用 phpMyAdmin 导入大文件:
• 修改 php.ini:调高 upload_max_filesize、post_max_size、max_execution_time(例如设为 512M 和 600)
• 修改 MySQL 配置(如 /etc/mysql/my.cnf):在 [mysqld] 段加 max_allowed_packet = 512M
• 重启服务:sudo systemctl restart mysql + sudo systemctl restart apache2(或 nginx),缺一不可
更推荐跳过 Web 层:
• 终端执行:mysql -u root -p myapp_db <br>• 注意路径用绝对路径,SQL 文件需对运行用户可读<br>• 若含密码,建议用 <code>~/.my.cnf 配置凭据,避免命令行泄露
导入中途失败或部分表缺失?检查 SQL 文件结构和 MySQL 严格模式
成功提示出现,但查表发现只有几张、或某些字段值异常(如时间全为 0000-00-00),大概率是 SQL 文件与当前 MySQL 版本兼容性问题。
关键排查点:
• 打开 SQL 文件,确认开头是否有 SET SQL_MODE = 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; 类语句;若 MySQL 开启了严格模式,而 SQL 文件里有非法日期/空字符串插入,会中断执行
• 检查是否含 CREATE DATABASE 语句:如果目标库已存在,该语句会报错并终止后续导入(除非你勾选了「Ignore errors」)
• 表引擎不匹配:如文件里是 ENGINE=InnoDB,但你的 MySQL 关闭了 InnoDB,会跳过建表
• 大文件中含大量 INSERT,可临时在导入前加 SET FOREIGN_KEY_CHECKS = 0;,导入后再 SET FOREIGN_KEY_CHECKS = 1;
真正麻烦的是那些静默失败:没报错,但数据不全。这种时候,别信“执行成功”,一定用 SHOW TABLES; 和 SELECT COUNT(*) FROM xxx; 逐个验证。



















