导出 JSON 必须手动勾选「结构」才能输出带键名的对象数组,否则仅为无键二维数组;需确保连接字符集为 utf8mb4 防乱码;大表应选「自定义」分页导出;JSON 仅含数据不包含视图、索引等元信息。
导出 JSON 格式数据时,必须手动勾选「结构」或「数据」选项
phpmyadmin 默认导出 json 时不会自动包含表结构(如字段名、类型),只输出纯数据行。如果你需要带字段名的 json 数组(类似 [{"id":1,"name":"alice"},...]),必须在导出页勾选「结构」;如果只想导出数据内容(不含字段定义),则取消勾选「结构」,只留「数据」。
常见错误是导出后发现 JSON 里只有值没有键名,打开文件一看是 [["1","Alice"],["2","Bob"]] 这种二维数组——这是没勾「结构」导致的。这种格式对前端解析极不友好,也难做版本比对。
- 勾选「结构」→ 输出带 key 的对象数组,字段顺序与表定义一致
- 不勾「结构」→ 输出纯值二维数组,体积略小但语义丢失
- 「格式特定选项」里可设置「删除引号」、「缩进」、「每行一个对象」等,按需调整
中文、emoji 或特殊字符导出为 JSON 会乱码?检查连接字符集
phpMyAdmin 导出 JSON 时,字符编码由当前数据库连接决定,不是文件保存编码。如果连接用的是 utf8(非 utf8mb4),遇到 emoji 或四字节中文就会变成 ? 或直接报错 Invalid UTF-8 sequence。
导出前务必确认顶部状态栏显示的连接字符集是 utf8mb4。如果不是,先在 SQL 窗口执行:SET NAMES utf8mb4;,再刷新导出页重试。
- 导出页「格式」选 JSON 后,下方「格式特定选项」里的「UTF-8 编码」勾选与否不影响 JSON 内容编码,它只控制注释和提示文字
- JSON 文件本身不声明编码,依赖 HTTP 响应头或 BOM,所以服务端返回时若没设
Content-Type: application/json; charset=utf-8,浏览器可能误判 - 最稳妥做法:导出后用编辑器打开,用「编码检测」功能确认是否为 UTF-8 without BOM
导出大表 JSON 时卡死或截断?别用默认「快速」模式
phpMyAdmin 的「快速」导出模式会把整张表一次性读入 PHP 内存再转 JSON,超过几万行就容易触发 memory_limit 或 max_execution_time 超限,表现为空白页、504 或 JSON 不完整(末尾缺括号)。
立即学习“PHP免费学习笔记(深入)”;
必须切换到「自定义」模式,并启用分页导出:
- 「导出方法」选 Custom
- 「数据」区域下拉「限制」填具体数字(如
1000),配合「开始记录」实现分批导出 - 勾选「另存为文件」+「压缩」(gzipped),减少传输压力
- 若需全量且稳定,跳过 phpMyAdmin,改用命令行:
mysql -u user -p -e "SELECT * FROM table" --json database > data.json
JSON 导出不包含视图、存储过程等对象
JSON 格式仅支持表数据导出,CREATE VIEW、DELIMITER、函数定义等完全不会出现在 JSON 文件里。这点和 SQL 格式完全不同——后者能通过勾选「对象」区域包含这些内容,而 JSON 没有对应选项。
如果你导出的是含视图逻辑的业务表,仅靠 JSON 文件无法还原查询上下文。例如视图 v_users_active 的定义不会导出,下游拿到 JSON 后根本不知道这个数据是过滤过的。
- JSON 只导出 SELECT 结果集,不保留源、权限、索引、约束
- 敏感字段(如手机号、身份证)不会自动脱敏,需自行处理或用脚本后置加工
- 时间字段默认转成字符串(如
"2026-07-30T12:35:00"),时区取决于 MySQL 服务器设置,不是客户端本地时间
导出 JSON 看似简单,但字段语义、字符完整性、大数据分片、元信息缺失这四点最容易被忽略。尤其是把 JSON 当作“轻量备份”用时,往往漏掉它根本不保存 schema 和逻辑依赖这个本质限制。



















