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

Ale*_*als 15 mysql json mysql-5.7

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

但是,当我尝试:

json_contains(\`column_name`,"ART")
Run Code Online (Sandbox Code Playgroud)

它错误地说:

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

请注意,json_contains"ART"中的数字不会出错,只能使用字符串.知道我可以做些什么来修复/解决这个问题?

Ale*_*als 23

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

这解决了我的问题!

  • https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html val 也是 JSON 对象类型 '"ART"' (2认同)
  • 谢谢你.这让我感到疯狂. (2认同)
  • 您可以使用 [JSON_QUOTE](https://dev.mysql.com/doc/refman/8.0/en/json-creation-functions.html#function_json-quote) 来引用字符串。示例: `json_contains(\`column_name\`, json_quote("ART"))` (2认同)

Ben*_*min 7

如果列名称仅存储标签(一个级别的数组),例如[“ ART”,“ LIT”,“ SPORTS”]

JSON_CONTAINS(column_name, 'ART', '$')
Run Code Online (Sandbox Code Playgroud)

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

JSON_CONTAINS(column_name, 'ART', '$.tag')
Run Code Online (Sandbox Code Playgroud)

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

JSON_CONTAINS(column_name, 'ART', '$.parent.tag')
Run Code Online (Sandbox Code Playgroud)

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