参数2中的无效JSON文本 - MySQL 5.7.8中的json_contains

问题描述 投票:10回答:3

我有一个数据库,其中一列是字符串的JSON(例如[“ART”,“LIT”]等)。我想用json_contains搜索它。

但是,当我尝试:

json_contains(\`column_name`,"ART")

它错误地说:

参数2中的无效JSON文本用于函数json_contains:“无效值”。在'ART'的第0位。

请注意,json_contains不会出现“ART”中的数字错误,只是字符串。知道我可以做些什么来修复/解决这个问题?

mysql json mysql-5.7
3个回答
20
投票

显然,它将整数与字符串区别对待。虽然json_contains(`column_name`,“1”)是一个有效的调用,但要检查它是否包含“ART”,你必须使用json_contains(`column_name`,'“ART”')。

这解决了我的问题!


3
投票

如果列名称只存储标记(一级数组),如[“ART”,“LIT”,“SPORTS”]

JSON_CONTAINS(column_name, 'ART', '$')

如果列名存储键值数组,如{“tag”:“ART”,“other”:“NONE”}

JSON_CONTAINS(column_name, 'ART', '$.tag')

最后,如果标记值在父数组中,则需要使用如下路径:

JSON_CONTAINS(column_name, 'ART', '$.parent.tag')

https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-contains


0
投票

如果您的候选人类型是字符串,只需在候选人上添加双引号然后再试一次。

json_contains(\`column_name`,'"ART"')

JSON_CONTAINS(target, candidate[, path])

© www.soinside.com 2019 - 2024. All rights reserved.