phpMyAdmin 直接填写 JSON 字段易报错,因不校验格式且 MySQL JSON 类型要求严格合法:必须双引号、无尾逗号、无单引号、特殊字符需转义;应使用文本模式,用外部工具(如浏览器 console 或 jsonlint)验证后再粘贴,Laravel 的 json 字段需填标准 JSON 字符串而非 PHP 数组。
直接在phpMyAdmin里填JSON字段会报错?
因为 phpmyadmin 默认把输入内容当字符串处理,不校验 json 格式,但 laravel 的 json 字段(mysql 5.7+ 的 json 类型)要求严格合法。你粘贴 {"name": "foo", "tags": ["a","b"]} 看似没问题,实际可能因多余空格、单引号、尾逗号或 unicode 转义失败被 mysql 拒绝。
常见错误现象:Invalid JSON text: "The document is empty." 或 Invalid JSON text in argument 1 to function json_valid.
- 必须用双引号包裹 key 和 string 值,单引号无效
- 不能有 trailing comma(比如
{"a": 1,}) - 特殊字符如换行、制表符要转义,或改用
\n、\t - phpMyAdmin 的「文本」模式比「十六进制」模式更安全,别误点 HEX
Laravel 迁移里定义的 JSON 字段,phpMyAdmin 怎么对应填值?
如果你用的是 Laravel 迁移中的 $table->json('meta'),底层是 MySQL 的 JSON 类型,phpMyAdmin 编辑时得按原生 JSON 规则输,不是 PHP 数组写法。
使用场景:补测试数据、修复线上脏数据、快速初始化配置项
- PHP 数组
['name' => 'test', 'active' => true]→ 必须转成 JSON 字符串:{"name": "test", "active": true} - 含中文?直接写 UTF-8 字符即可,不用
\uXXXX(除非你手动拼接出错) - 布尔值写
true/false,别写"true"(那会变成字符串) - 空数组写
[],空对象写{},别写null(除非字段允许 NULL)
怎么验证 JSON 是否合法再提交?
别靠眼睛扫,phpMyAdmin 不提供实时校验。最稳的方式是先在外部工具过一遍,再粘贴。
实操建议:
- 用浏览器控制台跑
JSON.parse('{"a":1}')—— 成功无报错就合法 - 或用在线工具如 jsonlint.com(注意别粘敏感数据)
- 复杂结构?用 Laravel Tinker 快速生成:
json_encode(['tags' => ['php', 'mysql']], JSON_UNESCAPED_UNICODE),复制结果 - phpMyAdmin 提交后,立刻用 SQL 查一下:
SELECT meta, JSON_VALID(meta) FROM users WHERE id = 1;,确认返回1
批量插入 JSON 数据时最容易漏掉什么?
用 SQL 插入多条带 JSON 的记录,容易忽略字符串转义和引号嵌套问题。
例如想插:INSERT INTO posts (title, options) VALUES ('A', '{"layout":"full","comments":true}');
- 外层单引号 + 内层双引号 OK;但若 JSON 里本身含双引号(比如
"desc": "He said \"hi\""),就得用反斜杠转义 - 更稳妥:用
JSON_OBJECT()和JSON_ARRAY()函数构造,比如:JSON_OBJECT('layout', 'full', 'comments', TRUE) - phpMyAdmin 的「插入」表单不支持函数,所以批量操作建议切到「SQL」页手写 INSERT
- 导出再导入?确保导出设置勾选了
Export type: Custom+Format: SQL+Disable foreign key checks
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











