Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL LIKE avec json_extract

Le classement par défaut de MySQL est latin1_swedish_ci avant 8.0 et utf8mb4_0900_ai_ci depuis 8.0 . Ainsi, les comparaisons de chaînes non binaires sont insensibles à la casse par défaut dans les colonnes ordinaires.

Cependant, comme mentionné dans le Manuel MySQL pour le type JSON

Par conséquent, votre valeur JSON est dans utf8mb4_bin classement et vous devez appliquer un classement insensible à la casse à l'un ou l'autre des opérandes pour rendre la comparaison insensible à la casse.

Par exemple

WHERE username COLLATE XXX LIKE '...'

XXX doit être un classement utf8mb4 (comme le utf8mb4_general_ci vous avez mentionné.).

Ou

WHERE username LIKE '...' COLLATE YYY

YYY doit être un classement qui correspond au jeu de caractères de votre connexion.

Pour une comparaison d'égalité, vous devez enlevez la valeur JSON avec JSON_UNQUOTE() ou l'opérateur d'extraction sans guillemets ->>

Par exemple

JSON_UNQUOTE(JSON_EXTRACT(payload, '$.username'))

Ou tout simplement

payload->>'$.username'

Le type et les fonctions JSON fonctionnent de manière différente des types de données ordinaires. Il semble que vous soyez novice. Je vous suggère donc de lire attentivement le manuel avant de le placer dans un environnement de production.