【发布时间】:2021-05-02 10:00:26
【问题描述】:
我如何在所有值上使用 MySQL 函数 JSON_SEARCH,而不仅仅是在字符串上?
所有这些错误都记录在 MySQL 模拟器上:https://www.db-fiddle.com/f/2UdrxqrQ3DeonbKWw3pVVp/0
我有 DDL:
CREATE TABLE table_name (
id int NOT NULL AUTO_INCREMENT,
json_config JSON,
PRIMARY KEY (id)
);
INSERT INTO table_name (id,json_config)
VALUES
(NULL, '{
"_id": "60111111111111175b78fe2fa",
"intestx": 0,
"codes": [
48348,
28923,
39080
],
"test": 562222222222456
}');
查询 #1:
SELECT
JSON_SEARCH(json_config, 'all', '%1111%')
FROM table_name;
结果 #1:
"$._id" #this is OK
查询 #2:
SELECT
JSON_SEARCH(json_config, 'all', '%2222%')
FROM table_name;
结果 #2:
null # this is bad BUG, because is exist match with $.test
感谢您对如何搜索所有值的建议,不仅是字符串,还包括数字等。
编辑:自 2015 年以来,我在 MySQL bugzilla 上发现了此错误报告,但此错误尚未解决,仅更新有关仅在字符串上进行函数搜索的文档... :-D https://bugs.mysql.com/bug.php?id=79233
MySQL 可能无法正确搜索,只能搜索字符串。所以我可能无法通过SQL(视图)来解决,但我必须通过PHP + SQL(表)的形式对自己的逻辑进行复杂的编程来解决......
我对此一点也不高兴。如果您知道任何可以做到这一点的方便的 PHP 组件。我的意思是将 JSON 解析为键、值组合以创建变量列表的所有组合。
【问题讨论】:
-
使
"test"值成为字符串,而不是数字,然后是 it works 我在文档中没有看到任何具体的内容,所以我不确定情况可能是什么? -
@PaulT。但是,在我的示例中,我声明该字符串有效。但是,我正在寻找价值,在这种情况下它不起作用。也许它会以某种方式指定分隔符。我无法将所有数字都转换为字符串,但这是个坏主意。
标签: mysql sql json search mariadb