Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL LIKE z json_extract

Domyślne sortowanie MySQL to latin1_swedish_ci przed 8.0 i utf8mb4_0900_ai_ci od 8.0 . Tak więc niebinarne porównania ciągów są domyślnie niewrażliwe na wielkość liter w zwykłych kolumnach.

Jednak, jak wspomniano w podręczniku MySQL dla typu JSON

Dlatego Twoja wartość JSON znajduje się w utf8mb4_bin sortowanie i musisz zastosować sortowanie bez rozróżniania wielkości liter do dowolnego operandu, aby porównanie wielkości liter nie było rozróżniane.

Np.

WHERE username COLLATE XXX LIKE '...'

gdzie XXX powinien być sortowaniem utf8mb4 (takim jak utf8mb4_general_ci wspomniałeś.).

Lub

WHERE username LIKE '...' COLLATE YYY

gdzie YYY powinno być zestawieniem pasującym do zestawu znaków twojego połączenia.

W celu porównania równości należy usuń cytat z wartości JSON z JSON_UNQUOTE() lub niecytowany operator wyodrębniania ->>

Np.

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

Lub po prostu

payload->>'$.username'

Typ i funkcje JSON działają zupełnie inaczej niż zwykłe typy danych. Wygląda na to, że jesteś w tym nowy. Dlatego sugerowałbym uważne przeczytanie instrukcji przed umieszczeniem jej w środowisku produkcyjnym.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Monitorowanie serwera Percona pod kątem MySQL — kluczowe wskaźniki

  2. liczenie wartości mysql

  3. Problem z zapytaniem o zakres daty i godziny w mySQL

  4. Docker — uruchom Apache na hoście i kontenerze dla różnych witryn

  5. Jaka jest różnica między MySQL i MySQL2 biorąc pod uwagę NodeJS?