sql >> データベース >  >> RDS >> PostgreSQL

SQLite3LIKEまたはPostgreSQLILIKE用の汎用Rubyソリューション?

    問題の原因 ここにあります:

    開発には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文字列


    1. OracleでGUIDを生成する方法は?

    2. Laravel:データベースに動的に接続する

    3. UbuntuマシンにOracleInstantClientとpdo_ociをインストールするにはどうすればよいですか?

    4. クエリの外れ値とは何ですか、それを修正する方法