問題の原因 ここにあります:
開発にはSQLite3を使用し、展開にはPostgreSQLを使用しています。
それは悪い考えです™。非互換性に遭遇し続けるでしょう-またはさらに悪いことに、損傷が発生するまでいくつかを認識しないでください。
開発と本番環境に同じRDBMS(PostgreSQL)を使用して、無意味なトラブルを回避してください。
不幸な設定で立ち往生している間、簡単な修正があります :
lower(style) LIKE lower(?)
両方のプラットフォームで同様に機能します。
-
右側の
lower()
をドロップできます 、小文字の検索パターンを指定した場合。 -
標準のSQLiteでは
lower(X)
ASCII文字のみを折りたたむ。詳細については、SQLiteマニュアルのコア関数の章を引用します:lower(X)関数は、すべてのASCII文字が小文字に変換された文字列Xのコピーを返します。デフォルトの組み込みlower()関数は、ASCII文字に対してのみ機能します。非ASCII文字で大文字と小文字を変換するには、ICU拡張機能をロードします 。
強調鉱山。
-
PostgreSQL
lower(X)
箱から出してUTF-8で動作します。
歓迎すべき副作用として、スピードが可能です 式lower(style)
のインデックスを使用して、PostgreSQLでそのクエリを実行します。 、ILIKE
を使用するよりも高速になります style
の基本的なインデックス 。
また、PostgreSQL 9.1以降、 pg_trgm
でGINまたはGISTインデックスを使用できます。 anyを高速化するための拡張機能 LIKE
およびILIKE
クエリ-トライグラムでは大文字と小文字は区別されません。この関連する回答の詳細な手順とリンク:
- オートコンプリートフィールド用の同様のUTF-8文字列