21

我有一个数据库,其中有一列是字符串的 JSON(例如 ["ART","LIT"] 等)。我想使用json_contains.

但是,当我尝试:

json_contains(\`column_name`,"ART")

它错误地说:

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

请注意,json_contains用数字代替“ART”不会出错,只是用字符串。知道我能做些什么来解决/解决这个问题吗?

4

3 回答 3

46

显然,它处理整数与字符串不同。Whilejson_contains(`column_name`,"1")是一个有效的调用,要检查它是否包含“ART”,您必须使用json_contains(`column_name`,'"ART"')(注意双引号)。

这解决了我的问题!

于 2015-11-04T04:27:15.737 回答
9

如果列名仅存储标签(一级数组),如 ["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

于 2018-10-11T01:05:50.607 回答
3

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

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

JSON_CONTAINS(目标,候选[,路径])

于 2019-04-25T10:15:27.217 回答