web-dev-qa-db-ja.com

引数2の無効なJSONテキスト-MySQL 5.7.8のjson_contains

文字列のJSONである1つの列を持つデータベースがあります([[ART]、 "LIT"]など)。 json_containsを使用して検索したい。

しかし、私がしようとすると:

json_contains(\`column_name`,"ART")

それは言ってエラー:

関数json_containsの引数2に無効なJSONテキスト:「無効な値」。 「ART」の0の位置。

json_containsは、「ART」の代わりに数字を使用してもエラーにならず、文字列のみを使用することに注意してください。これを修正/回避するために私ができることは何ですか?

17
Alex Beals

どうやら、それは文字列とは異なる整数を扱います。 json_contains( `column_name`、" 1 ")は有効な呼び出しですが、" ART "が含まれているかどうかを確認するには、json_contains(` column_name`、 '"ART"')を使用する必要があります。

それで私の問題は解決しました!

29
Alex Beals

列名ストアタグのみ(1レベルの配列)の場合、["ART"、 "LIT"、 "SPORTS"]

JSON_CONTAINS(column_name, 'ART', '$')

列名が{"tag": "ART"、 "other": "NONE"}のようなKey-Value配列を格納する場合

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

8
Benjamin

候補のタイプが文字列の場合は、候補に二重引用符を追加して、再試行してください。

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

JSON_CONTAINS(ターゲット、候補[、パス])

2
Joe