必须先选中目标数据库,否则报#1046错误;覆盖取决于SQL文件是否含DROP/INSERT ON DUPLICATE语句;字符集须三处统一为utf8mb4;大文件导入需同步调高MySQL与PHP配置并重启服务。
导入前必须先选中目标数据库
phpmyadmin 不会自动创建库,也不会帮你选库,它只往当前选中的库里执行 sql。如果没点进目标库就直接点 import,就会报 #1046 - no database selected。这个错误不是文件问题,是操作顺序错了。
- 先在左侧数据库列表里点击你要覆盖的库名(比如
myapp_db),确保它被高亮,顶部导航栏显示myapp_db » - 再点上方的
Import标签页 - 如果 SQL 文件开头没有
USE `myapp_db`;或CREATE DATABASE,又没手动选库,必然失败
覆盖行为取决于 SQL 文件内容,不是 phpMyAdmin 设置
phpMyAdmin 本身不提供“覆盖”开关——它只是逐行执行你给的 SQL。是否覆盖,全看 SQL 文件里有没有 DROP TABLE、TRUNCATE 或 INSERT ... ON DUPLICATE KEY UPDATE 这类语句。
- 如果 SQL 文件由 phpMyAdmin 自带的“自定义导出”生成,并勾选了
Add DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT,那么导入时会先删表再重建,等效于覆盖 - 如果 SQL 文件只有
INSERT INTO且主键/唯一键冲突,而没加IGNORE或REPLACE,会报错中断,不会覆盖 - 想安全覆盖,导出时务必选“自定义”,勾上
DROP选项;导入前确认目标库已选中,且无重要未备份数据
字符集不匹配会导致中文变问号,哪怕导入成功
导入完成但中文显示为 ??? 或乱码,不是数据丢了,是编码链断在某一处。三处必须统一为 utf8mb4:
- SQL 文件本身:用 VS Code 打开,右下角确认编码是
UTF-8 without BOM;若显示 GBK 或 ANSI,需另存为 UTF-8 - phpMyAdmin 导入页底部:
Character set of the file下拉框必须选utf8mb4(不是utf8) - 目标数据库默认校对规则:在该库的
Operations页里,把Collation改成utf8mb4_unicode_ci
大文件导入卡住或超时,本质是配置没生效
页面空白、进度条不动、提示 script timeout 或 lost connection to server,根本原因不是界面卡,是 MySQL 拒收大数据包。改完配置不重启服务,等于没改。
- MySQL 层:编辑
/etc/mysql/my.cnf,在[mysqld]段加max_allowed_packet = 512M,然后运行sudo systemctl restart mysql - PHP 层:改
php.ini,调高upload_max_filesize = 512M、post_max_size = 512M、max_execution_time = 600,再重启 Web 服务(sudo systemctl restart apache2或nginx) - 验证是否生效:导入前访问
phpinfo()页面,搜索对应参数值;或在 phpMyAdmin 的Home » Settings » Features查看上传限制
实际覆盖操作中最容易被跳过的,是重启服务和检查 SQL 文件编码这两步。配置改了但服务没重启,或者文件存成了 GBK 却在 phpMyAdmin 里硬选 utf8mb4,都会导致导入看似成功、实则数据损坏。
立即学习“PHP免费学习笔记(深入)”;



















