PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Ogólne rozwiązanie Ruby dla SQLite3 LIKE czy PostgreSQL ILIKE?

źródło problemu leży tutaj:

Używam SQLite3 do programowania i PostgreSQL do wdrażania.

To zły pomysł™. Będziesz ciągle napotykał niezgodności - lub, co gorsza:nie zdawaj sobie z nich sprawy, dopóki nie nastąpi uszkodzenie.
Używaj tego samego RDBMS (PostgreSQL) do programowania i produkcji i oszczędź sobie bezsensownych kłopotów.

Kiedy utkniesz ze swoją niefortunną konfiguracją, istnieje prosta poprawka :

lower(style) LIKE lower(?)

Działa na obu platformach jednakowo.

  • Możesz upuścić prawy lower() , jeśli podasz wzorzec wyszukiwania pisany małymi literami.

  • W standardowym SQLite lower(X) składa tylko litery ASCII. Więcej informacji można znaleźć w rozdziale Podstawowe funkcje w podręczniku SQLite:

    Funkcja lower(X) zwraca kopię ciągu X ze wszystkimi znakami ASCII zamienionymi na małe litery. Domyślna wbudowana funkcja lower() działa tylko dla znaków ASCII. Aby wykonać konwersję wielkości liter na znakach spoza ASCII, załaduj rozszerzenie ICU .

    Podkreśl moje.

  • PostgreSQL lower(X) działa z UTF-8 po wyjęciu z pudełka.

Jako pożądany efekt uboczny możesz przyspieszyć w górę tego zapytania w PostgreSQL z indeksem na wyrażeniu lower(style) , co będzie szybsze niż użycie ILIKE i podstawowy indeks style .

Ponadto od PostgreSQL 9.1 możesz używać indeksu GIN lub GIST z pg_trgm rozszerzenie przyspieszające dowolne LIKE i ILIKE zapytanie — w trygramach nie jest rozróżniana wielkość liter. Szczegółowe instrukcje i linki w tej powiązanej odpowiedzi:

  • Podobne ciągi UTF-8 dla pola autouzupełniania


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:problemy z kodowaniem w systemie Windows podczas korzystania z narzędzia wiersza poleceń psql

  2. Czy istnieje coś takiego jak funkcja zip() w PostgreSQL, która łączy dwie tablice?

  3. Jak uzyskać wartość z ostatniego wstawionego wiersza?

  4. Funkcja SQL jest bardzo powolna w porównaniu z zapytaniem bez opakowania funkcji

  5. Wyodrębnij datę (rrrr/mm/dd) ze znacznika czasu w PostgreSQL