JSON_CONTAINS 无法从 MySQL 中找到

Posted

技术标签:

【中文标题】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');

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

【讨论】:

以上是关于JSON_CONTAINS 无法从 MySQL 中找到的主要内容,如果未能解决你的问题,请参考以下文章

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

MySQL JSON - 使用 IN 语句 | json_contains

mysql中json_contains和json_search的区别

Mysql Json函数之搜索

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

如何限制 JSON_CONTAINS 只返回正值?