Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL LIKE con json_extract

Le regole di confronto predefinite di MySQL sono latin1_swedish_ci prima della 8.0 e utf8mb4_0900_ai_ci dalla 8.0 . Quindi i confronti di stringhe non binarie non fanno distinzione tra maiuscole e minuscole per impostazione predefinita nelle colonne ordinarie.

Tuttavia, come menzionato nel Manuale MySQL per il tipo JSON

Pertanto, il tuo valore JSON è in utf8mb4_bin regole di confronto ed è necessario applicare regole di confronto senza distinzione tra maiuscole e minuscole a uno degli operandi per rendere il confronto senza distinzione tra maiuscole e minuscole.

Es.

WHERE username COLLATE XXX LIKE '...'

dove XXX dovrebbe essere un confronto utf8mb4 (come utf8mb4_general_ci hai menzionato.).

Oppure

WHERE username LIKE '...' COLLATE YYY

dove YYY dovrebbe essere un confronto che corrisponda al set di caratteri della tua connessione.

Per il confronto dell'uguaglianza, dovresti annulla il valore JSON con JSON_UNQUOTE() o l'operatore di estrazione senza virgolette ->>

Es.

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

O semplicemente

payload->>'$.username'

Il tipo e le funzioni JSON funzionano in modo diverso dai normali tipi di dati. Sembra che tu sia nuovo. Quindi ti suggerisco di leggere attentamente il manuale prima di inserirlo in un ambiente di produzione.