sql >> Database teknologi >  >> RDS >> Mysql

MySQL LIKE med json_extract

Standardsorteringen af ​​MySQL er latin1_swedish_ci før 8.0 og utf8mb4_0900_ai_ci siden 8.0 . Så ikke-binære strengsammenligninger er som standard ufølsomme for store og små bogstaver i almindelige kolonner.

Men som nævnt i MySQL-manual til JSON-type

Derfor er din JSON-værdi i utf8mb4_bin sortering, og du skal anvende en versal-ufølsom sortering på begge operander for at gøre sammenligningen ufølsom.

F.eks.

WHERE username COLLATE XXX LIKE '...'

hvor XXX skal være en utf8mb4-samling (såsom utf8mb4_general_ci du har nævnt).

Eller

WHERE username LIKE '...' COLLATE YYY

hvor YYY skal være en sortering, der matcher tegnsættet for din forbindelse.

Til sammenligning af ligestilling bør du fjern anførselstegn for JSON-værdien med JSON_UNQUOTE() eller udtræksoperatøren ->>

F.eks.

JSON_UNQUOTE(JSON_EXTRACT(payload, '$.username'))

Eller bare

payload->>'$.username'

JSON-typen og -funktionerne fungerer meget anderledes end almindelige datatyper. Det ser ud til, at du er ny i det. Så jeg vil foreslå dig at læse manualen omhyggeligt, før du sætter den ind i et produktionsmiljø.



  1. Sådan BESTILLER du efter ud fra to forskellige kolonner

  2. Hvordan får man dybde i mysql store procedure rekursion?

  3. Kan plv8 JavaScript-sprogudvidelse kalde tredjepartsbiblioteker?

  4. inklusive manglende (nul-antal) rækker ved brug af GROUP BY