Standardsorteringen af MySQL er latin1_swedish_ci
før 8.0
og utf8mb4_0900_ai_ci
siden 8.0
. Så ikke-binære strengsammenligninger er som standard ufølsomme for store og små bogstaver i almindelige kolonner.
Men som nævnt i MySQL-manual til JSON-type
Derfor er din JSON-værdi i utf8mb4_bin
sortering, og du skal anvende en versal-ufølsom sortering på begge operander for at gøre sammenligningen ufølsom.
F.eks.
WHERE username COLLATE XXX LIKE '...'
hvor XXX
skal være en utf8mb4-samling (såsom utf8mb4_general_ci
du har nævnt).
Eller
WHERE username LIKE '...' COLLATE YYY
hvor YYY
skal være en sortering, der matcher tegnsættet for din forbindelse.
Til sammenligning af ligestilling bør du fjern anførselstegn for JSON-værdien
med JSON_UNQUOTE()
eller udtræksoperatøren ->>
F.eks.
JSON_UNQUOTE(JSON_EXTRACT(payload, '$.username'))
Eller bare
payload->>'$.username'
JSON-typen og -funktionerne fungerer meget anderledes end almindelige datatyper. Det ser ud til, at du er ny i det. Så jeg vil foreslå dig at læse manualen omhyggeligt, før du sætter den ind i et produktionsmiljø.