J'ai une base de données avec une colonne qui est JSON de chaînes (ex. ["ART", "LIT"], etc.). Je veux le rechercher en utilisant json_contains
.
Cependant, quand j'essaye:
json_contains(\`column_name`,"ART")
Il se trompe en disant:
Texte JSON non valide dans l'argument 2 pour la fonction json_contains: "Valeur non valide." en position 0 dans "ART".
Notez que json_contains
ne fait pas d'erreur avec des nombres à la place de "ART", juste avec des chaînes. Une idée de ce que je peux faire pour résoudre/contourner ce problème?
Apparemment, il traite les entiers différemment des chaînes. Bien que json_contains (`column_name`," 1 ") soit un appel valide, pour vérifier s'il contient" ART ", vous devez utiliser json_contains (` column_name`, '"ART"').
Cela a résolu mon problème!
Si le nom de colonne stocke les balises uniquement (un seul niveau), comme ["ART", "LIT", "SPORTS"]
JSON_CONTAINS(column_name, 'ART', '$')
Si le nom de la colonne stocke un tableau de valeurs-clés comme {"tag": "ART", "other": "NONE"}
JSON_CONTAINS(column_name, 'ART', '$.tag')
Enfin, si la valeur de la balise se trouve dans un tableau parent, vous devez utiliser un chemin comme celui-ci:
JSON_CONTAINS(column_name, 'ART', '$.parent.tag')
https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-contains
Si votre type de candidat est une chaîne, ajoutez simplement des guillemets doubles sur votre candidat, puis réessayez.
json_contains(\`column_name`,'"ART"')