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

Invalid JSON text in argument 2 - json_contains in MySQL 5.7.8

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

然而,当我尝试时:

json_contains(\`column_name`,"ART")

它错误地说:

Invalid JSON text in argument 2 to function json_contains: "Invalid value." at position 0 in 'ART'.

请注意 json_contains 在 "ART" 的位置用数字不会出错,只是用字符串。知道我可以为 fix/get 做些什么吗?

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

这解决了我的问题!

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

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

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

JSON_CONTAINS(target, candidate[, path])