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
相关产品推荐
相关产品推荐

