sql >> Databáze >  >> RDS >> Mysql

MySQL LIKE s json_extract

Výchozí řazení MySQL je latin1_swedish_ci před 8.0 a utf8mb4_0900_ai_ci od 8.0 . Nebinární porovnávání řetězců tedy ve výchozím nastavení v běžných sloupcích nerozlišuje velká a malá písmena.

Jak je však uvedeno v příručce MySQL pro typ JSON

Vaše hodnota JSON je proto v utf8mb4_bin řazení a musíte použít řazení bez ohledu na malá a velká písmena na oba operandy, aby porovnání nerozlišovalo malá a velká písmena.

Např.

WHERE username COLLATE XXX LIKE '...'

kde XXX by mělo být řazení utf8mb4 (jako je utf8mb4_general_ci jste zmínil.).

Nebo

WHERE username LIKE '...' COLLATE YYY

kde YYY by mělo být řazení, které odpovídá znakové sadě vašeho připojení.

Pro srovnání rovnosti byste měli zrušte uvozování hodnoty JSON s JSON_UNQUOTE() nebo necitující operátor extrakce ->>

Např.

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

Nebo jednoduše

payload->>'$.username'

Typ a funkce JSON fungují zcela jinak než běžné datové typy. Zdá se, že jste v tom nový. Proto bych vám doporučil, abyste si před uvedením do produkčního prostředí pečlivě přečetli příručku.



  1. Jak extrahovat řádky z pole json pomocí mysql udf json_extract 0.4.0?

  2. Jak odladím chyby, které nemají žádné chybové hlášení?

  3. Jak řešit problémy s ORA-02049 a se zámkem obecně s Oracle

  4. Průvodce rozdělením dat v PostgreSQL