mysql中json_contains和json_search的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql中json_contains和json_search的区别相关的知识,希望对你有一定的参考价值。

参考技术A

json_contains参数需要指定path,path如果不存在返回Null,path存在但是指定值不存在返回0,指定值存在则返回1。该函数需要注意的地方请查看 该文章

json_search(json_doc,one_or_all,search_str [,escape_char [, path]])
和json_contains相比,该函数不需要指定具体的path,更像是like一样的模糊查询。
如果查询的str存在,则返回具体的path,如果不存在则返回null。

注意
json_search() 只能搜索字符串,而不能搜索整形

比如 str字段值为"name":"xiaoyu","old":12

json_contains适合用于指定path的查询,而json_search适合模糊查询,比如说看下json中是否有\'hello\'这个字符串,而并不需要知道它在什么位置。

JSON_CONTAINS 无法从 MySQL 中找到

【中文标题】JSON_CONTAINS 无法从 MySQL 中找到【英文标题】:JSON_CONTAINS unable to find from MySQL 【发布时间】:2019-01-24 03:13:13 【问题描述】:

在 MySQL 中,我使用 PHP 的 json_encode 将数据存储在“jsonValues”字段中:

"product_category":[["category":["28"],"product":["16","22","64"]]]

通过PHP,我想通过编写以下查询来获取数据:

SELECT * FROM `dbTable` 
WHERE JSON_CONTAINS(jsonValues, '"category":["28"]');

但是,它显示错误

3141 - 函数 json_contains 的参数 2 中的 JSON 文本无效:“文档根不得跟随其他值。”在位置 10。

【问题讨论】:

为什么要将 JSON 存储在数据库中?您不能将它们存储在适当的数据库模式中吗? JSON_CONTAINS 可能不是您想要的,您可能正在搜索 JSON_EXTRACT。使用方法见***.com/a/39163928/3223157。 @Xatenev 我不能,因为我需要存储的信息无法存储到正确的数据库模式中,因为它们并不相同。 查看我的第一条评论的编辑。 试试这样的SELECT * FROM 'dbTable' WHERE JSON_CONTAINS(jsonValues, '$.category');参考:[dev.mysql.com/doc/refman/5.7/en/… 我已经尝试过了,但什么也没返回。 SELECT * FROM dbTable` WHERE JSON_CONTAINS(jsonValues, '["28"]', '$.shipping_location');` 【参考方案1】:

您是否尝试过像 mysql 文档那样在搜索词周围添加大括号?

SELECT * FROM `dbTable` WHERE JSON_CONTAINS(jsonValues, '"category":["28"]');

【讨论】:

谢谢你,但它也没有返回任何东西。 我的问题中提到的 jsonValues 有什么问题吗?【参考方案2】:

编写以下代码后返回该行:

SELECT * FROM `dbTable` WHERE JSON_CONTAINS(jsonValues, '"category":["28"]', '$.product_category');

【讨论】:

【参考方案3】:

如果上述方法都不适合你,那么试试下面的代码它应该可以工作。

SELECT * FROMdbTable WHERE JSON_CONTAINS(jsonValues, '"product_category": [["category": ["28"]]]');

【讨论】:

【参考方案4】:

我遇到了同样的问题, 我在数据库中保存数据如下,

$id = '1';
json_encode(array($id)); //in DB it stores like this => ["1"]

我把它改成了

$id = '1';
json_encode(array(intval($id))); //in DB it stores like this => [1]

那么这个查询就完美运行了。

Select * from table where WHERE JSON_CONTAINS(json_col, '$id');

希望以后能对大家有所帮助。

【讨论】:

以上是关于mysql中json_contains和json_search的区别的主要内容,如果未能解决你的问题,请参考以下文章

JSON_CONTAINS 无法从 MySQL 中找到

JSON_CONTAINS() 与 MySQL 中的 JSON 对象数组

MySQL JSON - 使用 IN 语句 | json_contains

使用 MariaDB 在 JSON_CONTAINS() 中未考虑德语变音符号

如何限制 JSON_CONTAINS 只返回正值?

MySQL - 搜索 JSON 数据列