文字列のJSONである1つの列を持つデータベースがあります([[ART]、 "LIT"]など)。 json_contains
を使用して検索したい。
しかし、私がしようとすると:
json_contains(\`column_name`,"ART")
それは言ってエラー:
関数json_containsの引数2に無効なJSONテキスト:「無効な値」。 「ART」の0の位置。
json_contains
は、「ART」の代わりに数字を使用してもエラーにならず、文字列のみを使用することに注意してください。これを修正/回避するために私ができることは何ですか?
どうやら、それは文字列とは異なる整数を扱います。 json_contains( `column_name`、" 1 ")は有効な呼び出しですが、" ART "が含まれているかどうかを確認するには、json_contains(` column_name`、 '"ART"')を使用する必要があります。
それで私の問題は解決しました!
列名ストアタグのみ(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
候補のタイプが文字列の場合は、候補に二重引用符を追加して、再試行してください。
json_contains(\`column_name`,'"ART"')