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

MySQL中搜索JSON字段内province数据无结果的解决方法

解决MySQL JSON字段中搜索province无结果的问题

我来帮你搞定这个问题!你的查询语句返回空结果,核心原因是**JSON_EXTRACT函数返回的字符串会带有双引号**。举个例子,从你的JSON字段里提取province,得到的结果是"province 123",而你用LIKE "%prov%"匹配的是不带引号的子串,自然匹配不上啦。

下面给你几个可行的解决方案,按简洁度排序:

方案1:使用简写运算符->>(最推荐)

MySQL提供了->>运算符,它等价于JSON_UNQUOTE(JSON_EXTRACT(...)),能直接返回不带引号的字符串,语句更简洁:

SELECT * FROM orders 
WHERE LOWER(description->>"$.address.information.province") LIKE "%prov%";

方案2:用JSON_UNQUOTE手动去除引号

如果你想明确写出函数逻辑,可以用JSON_UNQUOTE包裹JSON_EXTRACT的结果,去掉双引号后再匹配:

SELECT * FROM orders 
WHERE LOWER(JSON_UNQUOTE(JSON_EXTRACT(description, "$.address.information.province"))) LIKE "%prov%";

方案3:MySQL 8.0+ 可用JSON_VALUE函数

如果你的MySQL版本是8.0及以上,还可以用JSON_VALUE函数,它专门用来提取JSON中的标量值,返回结果本身就不带引号:

SELECT * FROM orders 
WHERE LOWER(JSON_VALUE(description, "$.address.information.province")) LIKE "%prov%";

另外补充个小技巧:如果你的数据库排序规则是不区分大小写的(比如utf8mb4_general_ci),其实可以不用LOWER()函数,直接写LIKE "%prov%"也能匹配到大写的PROV相关内容,不过加上LOWER()兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:52:42