使用MySQL JSON_搜索函数,使用不区分大小写的搜索获取JSON数据中值的路径表达式

使用MySQL JSON_搜索函数,使用不区分大小写的搜索获取JSON数据中值的路径表达式,mysql,json,mysql-json,Mysql,Json,Mysql Json,我需要从JSON数据中提取JSON路径表达式,并按值进行搜索 例如,如果我将JSON数据存储为 SET @j = '[{"name":"Kiran Muralee", "age" : 30 , "Salary" : 30000}, {"Name":"Arun Babu", "age" : 35 , "Salary" : 60000}]'; 如果我需要获取值为'Arun Babu'的JSON路径,我可以使用 SELECT JSON_SEARCH(@j, 'all', 'Arun Ba

我需要从JSON数据中提取JSON路径表达式,并按值进行搜索

例如,如果我将JSON数据存储为

SET @j = '[{"name":"Kiran Muralee", "age" : 30 , "Salary" : 30000},
      {"Name":"Arun Babu", "age" : 35 , "Salary" : 60000}]';
如果我需要获取值为'Arun Babu'的JSON路径,我可以使用

SELECT JSON_SEARCH(@j, 'all', 'Arun Babu');
这导致

"$[1].Name"
这是正确的,但问题是如果我使用值搜索“arun babu”,它将返回NULL。所以我使用了不区分大小写的搜索

SELECT JSON_SEARCH(lower(@j), 'all', lower('arun babu'));
所以现在我得到的结果是

"$[1].name"
但这不是我需要的,因为现在输出的结果也是小写的,我需要的结果是
“$[1]。名称” 谁能提出一个好的解决方案或方法


MySQL版本使用is 5.7(支持JSON类型的版本)

我们可以使用不区分大小写的排序规则获得预期的解决方案:

SELECT JSON_SEARCH(@j , 'all', 'arun babu' COLLATE utf8mb4_general_ci);

我认为您需要在应用程序代码(例如:PHP)中使用json_搜索的结果键,不区分大小写;使用相同的方法(
strtolower()
)@MadhurBhaiya,但要做到这一点,我需要将所有长JSON数据放入应用程序端(PHP)中。它可以使用MySQL查询本身实现,并且只将结果返回到应用程序中。抱歉,如果我误解了您的评论。不,我不是建议将完整的JSON带到应用程序端。只需获取结果(这里的键),并在PHP代码中以不区分大小写的方式使用它们。@MadhurBhaiya Ok,但结果已经不区分大小写了。如果JSON中还有另一个类似键的名称呢。键“Name”和“Name”不相同,并且包含不同的值。因此,如果需要提取键“Name”中的值,这是不可能的。@MadhurBhaiya您的意思是使用不区分大小写的搜索只提取键(可能有值),并在应用程序端进行一个小筛选,以找到以后要使用的正确键吗