roten till problemet ligger här:
Jag använder SQLite3 för utveckling och PostgreSQL för distribution.
Det är en dålig idé™. Du kommer att fortsätta stöta på inkompatibiliteter - eller ännu värre:inte inse några förrän skadan är skedd.
Använd samma RDBMS (PostgreSQL) för utveckling och produktion och spara dig själv det meningslösa besväret.
Medan du har fastnat med din olyckliga installation finns det en enkel åtgärd :
lower(style) LIKE lower(?)
Fungerar på båda plattformarna lika.
-
Du kan släppa den högra
lower()
, om du anger ett sökmönster med gemener. -
I standard SQLite
lower(X)
viker endast ASCII-bokstäver. För mer citerar jag kapitlet Kärnfunktioner i SQLite-manualen:Funktionen lower(X) returnerar en kopia av sträng X med alla ASCII-tecken omvandlade till gemener. Den inbyggda standardfunktionen lower() fungerar endast för ASCII-tecken. För att göra omvandlingar av skiftlägen på icke-ASCII-tecken, ladda in ICU-tillägget .
Betoning min.
-
PostgreSQL
lower(X)
fungerar med UTF-8 ur förpackningen.
Som en välkommen bieffekt kan du hastigheta upp den frågan i PostgreSQL med ett index på uttrycket lower(style)
, vilket kommer att vara snabbare än att använda ILIKE
och ett grundläggande index på style
.
Sedan PostgreSQL 9.1 kan du också använda ett GIN- eller GIST-index med pg_trgm
tillägg för att påskynda alla LIKE
och ILIKE
fråga - trigram är skiftlägesokänsliga. Detaljerade instruktioner och länkar i detta relaterade svar:
- Liknande UTF-8-strängar för autoslutförandefält