sql >> Databasteknik >  >> RDS >> Mysql

MySQL LIKE med json_extract

Standardsorteringen av MySQL är latin1_swedish_ci före 8.0 och utf8mb4_0900_ai_ci sedan 8.0 . Så icke-binära strängjämförelser är som standard skiftlägesokänsliga i vanliga kolumner.

Men som nämnts i MySQL-manual för JSON-typ

Därför är ditt JSON-värde i utf8mb4_bin sortering och du måste använda en skiftlägesokänslig sortering på endera operanden för att göra jämförelsen skiftlägesokänslig.

T.ex.

WHERE username COLLATE XXX LIKE '...'

där XXX ska vara en utf8mb4-kollation (som utf8mb4_general_ci du har nämnt.).

Eller

WHERE username LIKE '...' COLLATE YYY

där YYY bör vara en sammanställning som matchar teckenuppsättningen för din anslutning.

För jämställdhetsjämförelse bör du ta bort JSON-värdet med JSON_UNQUOTE() eller extraktionsoperatorn ->>

T.ex.

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

Eller helt enkelt

payload->>'$.username'

JSON-typen och funktionerna fungerar mycket annorlunda än vanliga datatyper. Det verkar som att du är ny på det. Så jag skulle föreslå att du läser manualen noggrant innan du sätter in den i en produktionsmiljö.



  1. Hur kontrollerar man privilegierna (DDL,DML,DCL) på objekt som tilldelats Schema, Roller i Oracle Database?

  2. Konverterar objekt till CLOB

  3. php/mysql. Finns det mysql-funktion för att upptäcka om minst 2 vissa ord finns i minst ett mysql-radfält

  4. Lång anslutningstid med Azure Postgres