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

30

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

但是,当我尝试时:

json_contains(\`column_name`,"ART")

错误信息如下:

在函数 json_contains 的第二个参数中出现无效的 JSON 文本:“Invalid value.”,位置在 'ART' 的开头。

请注意,json_contains 中若以数字代替“ART”,则不会产生错误,只有字符串才会。您有什么办法可以解决这个问题?

3个回答

75

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

这解决了我的问题!


2
https://dev.mysql.com/doc/refman/5.7/zh/json-search-functions.htmlval 也是一个 JSON 对象类型 ' "ART" ' - odedsh
你知道如何在Spring JPA NativeQuery中使用它吗? - GeekLei
5
您可以使用JSON_QUOTE函数对字符串进行引用。例如:json_contains(column_name, json_quote("ART")) - nonylene

11

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


4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接