我遇到过一种情况,我们将标签存储在 JSON 数组中,并且客户端开始使用它作为键值存储。 我现在需要添加一种不区分大小写搜索此数据的方法。
例如,如果 JSON 列包含
{
"tags": ["Key1:value1", "Key2:value2"]
}
如何在数组中成功搜索到“Key1:VaLuE1”?
我目前正在这样查询,其中
meta
是JSON列:
select * from events where "Key1:value1" member of (meta->"$.tags");
我尝试过在where条件的两侧添加
collate utf8mb4_general_ci
,但它不起作用。 我也尝试过进行 LIKE
比较,但这不起作用,因为我需要确保它只检索完整的字符串(例如不是“Key1:val”)。 我还想避免更改表来更改整个 JSON 列的排序规则,但如果这是唯一的选择,我会考虑这一点。
您可以解决 JSON 数组中不区分大小写的搜索问题,同时可以确保字符串比较检查完全匹配(而不是部分匹配),因此您可以结合使用 JSON_EXTRACT 和 LOWER 函数
试试这个
SELECT *
FROM events
WHERE LOWER(JSON_UNQUOTE(JSON_EXTRACT(meta, '$.tags'))) = LOWER('Key1:VaLuE1');