Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL LIKE mit json_extract

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.