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.