Die Standardsortierung von MySQL ist latin1_swedish_ci
vor 8.0
und utf8mb4_0900_ai_ci
seit 8.0
. Daher wird bei nicht-binären Zeichenfolgenvergleichen in gewöhnlichen Spalten standardmäßig die Groß-/Kleinschreibung nicht beachtet.
Wie jedoch im MySQL-Handbuch für den JSON-Typ erwähnt
Daher befindet sich Ihr JSON-Wert in utf8mb4_bin
und Sie müssen auf jeden Operanden eine Sortierung anwenden, bei der die Groß-/Kleinschreibung nicht berücksichtigt wird, damit beim Vergleich die Groß-/Kleinschreibung nicht berücksichtigt wird.
Z. B.
WHERE username COLLATE XXX LIKE '...'
wobei XXX
sollte eine utf8mb4-Sortierung sein (wie etwa utf8mb4_general_ci
Sie haben erwähnt.).
Oder
WHERE username LIKE '...' COLLATE YYY
wobei YYY
sollte eine Sortierung sein, die dem Zeichensatz Ihrer Verbindung entspricht.
Für einen Gleichheitsvergleich sollten Sie Anführungszeichen für den JSON-Wert entfernen
mit JSON_UNQUOTE()
oder der Extraktionsoperator ohne Anführungszeichen ->>
Z. B.
JSON_UNQUOTE(JSON_EXTRACT(payload, '$.username'))
Oder einfach
payload->>'$.username'
Der JSON-Typ und die Funktionen funktionieren ganz anders als gewöhnliche Datentypen. Es scheint, dass Sie neu darin sind. Ich würde Ihnen daher empfehlen, das Handbuch sorgfältig zu lesen, bevor Sie es in einer Produktionsumgebung einsetzen.