mysql中json_contains和json_search的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql中json_contains和json_search的区别相关的知识,希望对你有一定的参考价值。
参考技术Ajson_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 * FROM
dbTable
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 对象数组
MySQL JSON - 使用 IN 语句 | json_contains