确认当前生效php.ini需在phpMyAdmin根目录建info.php并访问查看“Loaded Configuration File”路径;必须同步修改upload_max_filesize、post_max_size、max_execution_time、memory_limit四参数;最终推荐用mysql命令行导入并指定--default-character-set=utf8mb4。

phpEnv 下 phpMyAdmin 导入大 SQL 文件失败,根本不是 phpEnv 的锅,而是 PHP 和 MySQL 两级限制在拦路——改对位置、改全参数、再绕过界面,才能真正跑通。
怎么确认当前生效的 php.ini 文件?
phpEnv 是多版本 PHP 环境管理工具,它会为每个 PHP 版本维护独立的 php.ini,但网页请求走的是 Apache/Nginx 绑定的那个版本,不是 CLI 默认版本。直接改错文件等于白干。
实操建议:
- 在 phpMyAdmin 根目录新建
info.php,内容为<?php phpinfo(); ?>,用浏览器访问它 - 搜索
Loaded Configuration File,看到的路径才是当前 Web 请求实际加载的php.ini(比如C:\phpenv\versions\8.2.12\etc\php.ini) - 别去改
cli/php.ini或其他版本下的配置——它们对 phpMyAdmin 无效
必须同步修改的四个 PHP 参数
只改 upload_max_filesize 是最常见的翻车点。POST 数据包、脚本执行、内存三道关卡缺一不可,且有依赖关系。
立即学习“PHP免费学习笔记(深入)”;
在上一步确认的 php.ini 中,找到并修改以下四行(数值按需调整,示例为 500MB 文件):
-
upload_max_filesize = 512M(上传文件上限) -
post_max_size = 512M(必须 ≥upload_max_filesize,否则表单提交直接被 PHP 拦截) -
max_execution_time = 600(默认 30 秒,大 SQL 解析+执行必超时) -
memory_limit = 512M(PHP 进程内存上限,要大于文件大小,否则读取时 OOM)
改完保存,**必须重启 phpEnv 对应的 Apache 服务**(比如通过 phpEnv 控制台点击 “Restart Apache”,或命令行执行 phpenv apache restart),否则参数不生效。
为什么改完还是报 500 或空白页?
这是 phpMyAdmin 自身的执行瓶颈:它把整个 SQL 文件读进 PHP 内存,再切片执行。哪怕 PHP 参数全放开,遇到含百万级 INSERT 的单文件,仍大概率崩溃。
此时不要继续调参,换更底层的方式:
- 打开终端,cd 到 phpEnv 的 MySQL bin 目录(如
C:\phpenv\versions\8.2.12\mysql\bin) - 执行:
mysql -u root -p --default-character-set=utf8mb4 database_name(输密码后回车,注意密码不显示) - 进入 MySQL 后,用
source C:/path/to/your/file.sql导入(路径用正斜杠或双反斜杠,避免转义问题)
该方式完全绕过 PHP 上传和解析流程,不受任何 php.ini 限制,且能正确处理 utf8mb4 编码,中文不会变问号。
导入后表结构错乱或部分数据丢失?
常见于 SQL 文件里混用了 SET NAMES latin1 或缺失字符集声明。phpMyAdmin 在解析时可能误判,而命令行导入若没显式指定编码,默认用 latin1。
务必在命令行导入时带上:--default-character-set=utf8mb4,例如:
mysql -u root -p --default-character-set=utf8mb4 mydb < C:/data/large.sql
如果 SQL 文件本身已包含 CREATE DATABASE ... CHARACTER SET utf8mb4,也要确保目标数据库已用相同字符集创建,否则表字段仍可能退化为 utf8 或 latin1。



















