MariaDB中使用->操作符从JSON列提取键值报1064语法错误
#1064语法错误排查
- 报错的核心原因是你当前连接的MariaDB服务端版本不支持
->这个JSON快捷提取操作符:->是MySQL 5.7.9版本新增的语法简写,MariaDB直到10.2.7版本才做了兼容适配,低版本的SQL解析器识别到->标记时会直接判定为非法语法,因此报错位置会精准定位到这段带->的语句段。 - 你当前使用的mysqlnd客户端是2015年发布的5.0.12-dev版本,搭配phpMyAdmin 5.0.2连接的数据库服务端版本,远低于支持
->操作符的最低阈值,直接执行简写语句必然触发解析错误。
实现JSON键值提取的兼容方案
不要依赖对版本要求高的->简写,直接使用全版本兼容的原生JSON函数完成提取,两种场景的写法如下:
- 基础值提取:返回带JSON字符串格式标记的结果,比如对应示例数据会返回
"antonio":SELECT JSON_EXTRACT(tops, '$.title') AS tops FROM arts; - 纯文本值提取:去掉结果外层的JSON双引号,直接返回实际文本内容
antonio,和->操作符的输出效果完全一致:SELECT JSON_UNQUOTE(JSON_EXTRACT(tops, '$.title')) AS tops FROM arts; - 适配提示:如果后续升级数据库到MariaDB 10.2.7及以上版本,才可以换回
SELECT tops->'$.title' AS tops FROM arts;的简写写法,当前低版本环境下使用上述函数写法的通用性最强,哪怕存储JSON的列是普通文本类型的合法JSON,只要服务端支持JSON_EXTRACT函数就能正常运行,不会触发语法解析错误。
内容的提问来源于stack exchange,提问作者qadenza
相关产品推荐
相关产品推荐

