【发布时间】:2020-07-22 11:18:48
【问题描述】:
我有一个 MySQL 查询,我在其中按 json 字段过滤:
SELECT id, username
FROM (SELECT id,
Json_extract(payload, '$.username') AS username
FROM table1) AS tmp
WHERE username = 'userName1';
返回 1 行,如下所示:
1, "userName1"看到子句中没有的引号了吗?
我需要使WHERE 子句不区分大小写。
但是当我这样做时
WHERE username LIKE 'userName1';
它返回 0 行。我不明白为什么它会这样工作,= 子句虽然没有双引号,但仍然有效。
如果我这样做了
WHERE username LIKE '%userName1%';
现在也返回该行,因为%% 考虑了引号:
1, "userName1"
但是当我这样做时
WHERE username LIKE '%username1%';
它返回 0 行,因此与通常的 MySQL LIKE 不同,它在某种程度上区分大小写。
我做错了什么以及如何以不区分大小写的方式过滤 json 有效负载?
编辑==========================================
猜测是这里应该使用COLLATE,但到目前为止我还不明白如何使它工作。
【问题讨论】:
-
我认为mysql默认不区分大小写。二进制操作时只区分大小写
-
LIKE 子句在 json 之外不区分大小写,可以使用任何字符串。但如果是 json,它的工作原理是这样的
-
当您需要 MySQL 在字符串内部翻找时,请重新考虑使用 JSON。相反,可能值得将该字段拆分为单独的列。
标签: mysql sql sql-like mysql-json collate