Подреждането по подразбиране на MySQL е latin1_swedish_ci
преди 8.0
и utf8mb4_0900_ai_ci
от 8.0
. Така че сравненията на недвоични низове са нечувствителни към малки и големи букви по подразбиране в обикновените колони.
Въпреки това, както е споменато в ръководството на MySQL за тип JSON
Следователно вашата JSON стойност е в utf8mb4_bin
съпоставяне и трябва да приложите съпоставяне без значение за главни и малки букви към всеки от операндите, за да направите сравнението без значение за главни и малки букви.
Напр.
WHERE username COLLATE XXX LIKE '...'
където XXX
трябва да бъде utf8mb4 съпоставка (като utf8mb4_general_ci
сте споменали.).
Или
WHERE username LIKE '...' COLLATE YYY
където YYY
трябва да бъде съпоставка, която съответства на набора от знаци на вашата връзка.
За сравнение на равенството трябва да премахнете кавички от JSON стойността
с JSON_UNQUOTE()
или оператора за извличане за премахване на кавички ->>
Напр.
JSON_UNQUOTE(JSON_EXTRACT(payload, '$.username'))
Или просто
payload->>'$.username'
Типът и функциите JSON работят по различен начин от обикновените типове данни. Изглежда, че сте нов в него. Затова бих ви препоръчал да прочетете внимателно ръководството, преди да го поставите в производствена среда.