Výchozí řazení MySQL je latin1_swedish_ci
před 8.0
a utf8mb4_0900_ai_ci
od 8.0
. Nebinární porovnávání řetězců tedy ve výchozím nastavení v běžných sloupcích nerozlišuje velká a malá písmena.
Jak je však uvedeno v příručce MySQL pro typ JSON
Vaše hodnota JSON je proto v utf8mb4_bin
řazení a musíte použít řazení bez ohledu na malá a velká písmena na oba operandy, aby porovnání nerozlišovalo malá a velká písmena.
Např.
WHERE username COLLATE XXX LIKE '...'
kde XXX
by mělo být řazení utf8mb4 (jako je utf8mb4_general_ci
jste zmínil.).
Nebo
WHERE username LIKE '...' COLLATE YYY
kde YYY
by mělo být řazení, které odpovídá znakové sadě vašeho připojení.
Pro srovnání rovnosti byste měli zrušte uvozování hodnoty JSON
s JSON_UNQUOTE()
nebo necitující operátor extrakce ->>
Např.
JSON_UNQUOTE(JSON_EXTRACT(payload, '$.username'))
Nebo jednoduše
payload->>'$.username'
Typ a funkce JSON fungují zcela jinak než běžné datové typy. Zdá se, že jste v tom nový. Proto bych vám doporučil, abyste si před uvedením do produkčního prostředí pečlivě přečetli příručku.