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

MySQL中JSON_EXTRACT在WHERE条件中失效?附报错与相关代码

SQL JSON查询失效及报错问题

尝试执行的SQL语句

  • 语句1:
SELECT * FROM `gass_pedan` WHERE json_extract(`cars_info`, '$.driver_id') = 4;
  • 语句2:
SELECT * FROM `gass_pedan` WHERE JSON_CONTAINS(`cars_info`, '4', '$.driver_id')

报错信息

#3141 - Invalid JSON text in argument 1 to function json_extract: "The document is empty." at position 0.

cars_info字段的JSON示例

{"mxrid":2,"mxrno":"11","driver_id":"4","drname":"carl","cartype":"mixer"}

问题分析与解决方案

核心问题

  • 空/无效JSON触发报错:报错提示“文档为空”,说明表中cars_info字段存在空值、空字符串或格式错误的JSON数据,这类数据在执行JSON函数时会触发#3141错误。
  • 数据类型不匹配导致无结果:JSON中driver_id是字符串类型(值为"4"),但第一条语句用数字4做匹配,类型不匹配会导致查询无返回结果。

修正后的SQL语句

方案1:修复json_extract查询

先过滤有效JSON数据,再匹配对应字符串值:

SELECT * FROM `gass_pedan` 
WHERE JSON_VALID(`cars_info`) = 1 
AND json_extract(`cars_info`, '$.driver_id') = '4';

方案2:修复JSON_CONTAINS查询

JSON_CONTAINS的第二个参数需为JSON格式的字符串(要包裹双引号),同时过滤无效JSON:

SELECT * FROM `gass_pedan` 
WHERE JSON_VALID(`cars_info`) = 1 
AND JSON_CONTAINS(`cars_info`, '"4"', '$.driver_id');

补充说明

  • JSON_VALID()函数可提前筛选格式合法的JSON数据,避免空文档报错。
  • JSON字段的取值类型必须与匹配值类型严格一致,字符串类型的JSON值要用单引号包裹的字符串匹配,不能直接用数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:05:12