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.