我有一个数据库,其中有一列是字符串的 JSON(例如 ["ART","LIT"] 等)。我想使用json_contains
.
但是,当我尝试:
json_contains(\`column_name`,"ART")
它错误地说:
函数 json_contains 的参数 2 中的 JSON 文本无效:“值无效。” 在“ART”中的位置 0。
请注意,json_contains
用数字代替“ART”不会出错,只是用字符串。知道我能做些什么来解决/解决这个问题吗?
显然,它处理整数与字符串不同。Whilejson_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"')