导入时页面空白或卡进度条是max_allowed_packet过小导致服务端拒收大包,需同步调高mysql的max_allowed_packet、php的upload_max_filesize和post_max_size,并重启mysql、web服务器及php-fpm;phpmyadmin必须先选库再导入;中文乱码需确保sql文件为utf-8无bom、phpmyadmin选utf8mb4、目标库表字符集也为utf8mb4;版本不兼容问题须替换排序规则或删除definer语句;大文件应弃用phpmyadmin,改用mysql命令行导入。
导入时页面空白或卡在进度条不动
这是max_allowed_packet太小的典型表现,不是phpmyadmin界面卡死,而是mysql服务端直接拒绝接收大包。哪怕你看到“正在上传”,实际数据还没进mysql就已被截断。
- 必须同时修改MySQL配置:在
/etc/mysql/my.cnf的[mysqld]段加max_allowed_packet = 512M,然后sudo systemctl restart mysql - PHP层也要同步调高:
upload_max_filesize = 512M、post_max_size = 512M(注意:后者必须≥前者)、max_execution_time = 600 - 改完不重启服务=白改——Apache/Nginx和PHP-FPM都得重启,缺一不可
报错#1046 - No database selected
phpMyAdmin不会自动选库,也不会帮你创建库。它只往当前高亮的数据库里执行SQL。没选库就点导入,必然失败。
- 操作顺序不能错:先在左侧列表点击目标数据库名(比如
myapp_db),确认顶部导航栏显示myapp_db »,再点上方Import标签页 - 如果SQL文件开头没有
USE `xxx`;或CREATE DATABASE语句,又没手动选库,就一定会报这个错 - 别指望phpMyAdmin“智能识别”——它不解析SQL内容来决定往哪导,只认当前上下文
导入后中文变问号或乱码
根本原因是字符集链路断裂:SQL文件用UTF-8保存,但phpMyAdmin没按UTF-8解析,或目标表字段用的是latin1。
- 确保SQL文件本身是UTF-8无BOM编码(用VS Code或Notepad++检查并转存)
- phpMyAdmin右上角“Character set of the file”必须选
utf8mb4,不能留空或选auto - 目标数据库、表、字段的默认字符集也得是
utf8mb4,不是utf8(后者不支持emoji) - 导入前在SQL文件最开头加一行
SET NAMES utf8mb4;,能强制会话层编码对齐
报Unknown collation: 'utf8mb4_0900_ai_ci'或DEFINER相关错误
这是版本兼容性问题:MySQL 8.0导出的文件含新特性,往5.7或更低版本导入时被拒。
-
utf8mb4_0900_ai_ci只在MySQL 8.0+存在,5.7目标库需全局替换为utf8mb4_unicode_ci(Linux用sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' dump.sql) -
DEFINER=`xxx`@`yyy`在严格模式下会被校验用户权限,删掉最省事:sed -i 's/DEFINER=`[^`]*`@`[^`]*`//g' dump.sql - 函数/存储过程缺
READS SQL DATA等声明?不是改MySQL配置,而是直接在SQL文件里补上——找到CREATE FUNCTION语句,在RETURNS后加上READS SQL DATA
大文件导入真正可靠的路径只有一条:跳过phpMyAdmin,用mysql命令行。所有配置调高、字符集对齐、DEFINER清理,都是为这条路径铺路——而不是为了让网页上传“看起来能用”。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











