Domyślne sortowanie MySQL to latin1_swedish_ci
przed 8.0
i utf8mb4_0900_ai_ci
od 8.0
. Tak więc niebinarne porównania ciągów są domyślnie niewrażliwe na wielkość liter w zwykłych kolumnach.
Jednak, jak wspomniano w podręczniku MySQL dla typu JSON
Dlatego Twoja wartość JSON znajduje się w utf8mb4_bin
sortowanie i musisz zastosować sortowanie bez rozróżniania wielkości liter do dowolnego operandu, aby porównanie wielkości liter nie było rozróżniane.
Np.
WHERE username COLLATE XXX LIKE '...'
gdzie XXX
powinien być sortowaniem utf8mb4 (takim jak utf8mb4_general_ci
wspomniałeś.).
Lub
WHERE username LIKE '...' COLLATE YYY
gdzie YYY
powinno być zestawieniem pasującym do zestawu znaków twojego połączenia.
W celu porównania równości należy usuń cytat z wartości JSON
z JSON_UNQUOTE()
lub niecytowany operator wyodrębniania ->>
Np.
JSON_UNQUOTE(JSON_EXTRACT(payload, '$.username'))
Lub po prostu
payload->>'$.username'
Typ i funkcje JSON działają zupełnie inaczej niż zwykłe typy danych. Wygląda na to, że jesteś w tym nowy. Dlatego sugerowałbym uważne przeczytanie instrukcji przed umieszczeniem jej w środowisku produkcyjnym.