You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 8下JSON字段提取代码失效及报错问题求助

搞定MySQL 8里JSON_EXTRACT的1054错误

嘿,我刚好碰到过类似的问题!先给你理清楚来龙去脉,再给你靠谱的解决方案:

首先得纠正个小误区:你说的「MySQL 10」其实应该是MariaDB 10系列——MySQL本身没有10.x的版本,这俩在JSON函数的支持上有细节差异,这也是你跨环境出问题的根源之一。

回到你的错误:Error Code: 1054. Unknown column '$.pis_nit' in 'field list',这个报错本质是MySQL把$.pis_nit当成了数据表的列名,而不是JSON路径参数——说白了就是你写SQL的时候,JSON路径没有用英文引号包裹(大概率是输入时漏了或者不小心用了中文引号)。

直接能用的正确写法

写法1:标准JSON_EXTRACT(MySQL 8全版本兼容)

确保路径用英文单/双引号包起来,SQL应该是这样:

SELECT JSON_EXTRACT(campos, '$.pis_nit') FROM documento;

写法2:更简洁的箭头操作符(MySQL 5.7+就支持)

MySQL支持用->代替JSON_EXTRACT,代码更短,效果完全一样:

SELECT campos->'$.pis_nit' FROM documento;

如果想要直接拿到不带双引号的纯文本值,用->>(等价于JSON_UNQUOTE(JSON_EXTRACT(...))):

SELECT campos->>'$.pis_nit' FROM documento;

写法3:如果你的MySQL 8版本够新,直接用原来的JSON_VALUE也行

MySQL 8.0.17及以后的版本正式支持JSON_VALUE函数,和MariaDB 10的用法一致。先查下你的版本:

SELECT VERSION();

如果版本≥8.0.17,直接用你原来的代码就行,注意路径的引号别漏:

SELECT JSON_VALUE(campos, '$.pis_nit') FROM documento;

额外排查点

如果按上面的写法还是报错,检查这两点:

  • 确认campos字段是JSON类型,或者是存储合法JSON格式的字符串字段。如果是普通字符串,需要先转成JSON:SELECT JSON_EXTRACT(JSON(campos), '$.pis_nit') FROM documento;
  • 绝对不要用中文引号包裹路径,MySQL识别不了中文引号,会直接把路径当成列名

内容的提问来源于stack exchange,提问作者Vanessa Lemos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 18:22:43