MySQL中查找JSON字符串内匹配整数123的报错问题排查
MySQL JSON查询错误分析与修正
第一个查询(JSON_CONTAINS)的错误及修正
- 错误原因:
JSON_CONTAINS的第二个参数要求是JSON格式的值,你的respCode存储的是字符串类型的"123",但你传入的是数字123,类型不匹配;同时该参数必须是JSON字符串或JSON类型,因此需要将查询值转为JSON格式的字符串。 - 修正后的语句:
SELECT * FROM `reports` WHERE JSON_CONTAINS(json_data, '"123"', '$.respCode');
或者用JSON_QUOTE函数自动处理引号:
SELECT * FROM `reports` WHERE JSON_CONTAINS(json_data, JSON_QUOTE('123'), '$.respCode');
第二个查询(JSON_UNQUOTE+JSON_EXTRACT)的错误及修正
- 错误原因:你在
JSON_EXTRACT里把列名json_data用单引号括起来了,这会让MySQL将其视为普通字符串,而非读取列中的JSON数据。 - 修正后的语句:
SELECT * FROM `reports` WHERE JSON_UNQUOTE(JSON_EXTRACT(json_data, '$.respCode')) = '123';
更简洁的写法(MySQL 5.7.9及以上版本支持):
SELECT * FROM `reports` WHERE json_data->>'$.respCode' = '123';
内容的提问来源于stack exchange,提问作者Shaho
相关产品推荐
相关产品推荐

