参数 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 个字符串(例如 ["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"')