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

Linq to Entities :NText フィールドで ToLower() を使用する

    .ToLower() を使用しないでください 大文字と小文字を区別しない比較を実行します。理由は次のとおりです:

    <オール>
  1. 間違っている可能性があります (たとえば、クライアント照合はトルコ語で、DB 照合はそうではない可能性があります)。
  2. それは非常に 非効率的な;発行された SQL は LOWER です = の代わりに 大文字と小文字を区別しない照合を使用します。
  3. 代わりに、StringComparison.OrdinalIgnoreCase を使用してください または StringComparison.CurrentCultureIgnoreCase :

    var q = from f in Context.Foos
            where f.Bar.Equals("hi", StringComparison.OrdinalIgnoreCase)
            select f;
    

    ただし、Contains() の場合 問題があります:Equals とは異なります , StartsWith など、StringComparison のオーバーロードがありません 口論。なんで?良い質問; Microsoft に問い合わせてください。

    それを、LOWER に対する SQL Server の制限と組み合わせる つまり、あなたがやりたいことをする簡単な方法はありません。

    考えられる回避策は次のとおりです:

    • 全文索引を使用し、手順で検索を行います。
    • Equals を使用する または StartsWith 代わりに、可能であれば、あなたのタスクのために
    • 列のデフォルトの照合順序を変更しますか?


    1. pdoは画像をデータベースに直接挿入します-常にBLOBを挿入します-0B

    2. ListをJavaからOracleプロシージャに渡す方法は?

    3. データベースパフォーマンス監視設定のグレーディング

    4. ネストされたブロックは、PL / SQLプロシージャのパフォーマンスに影響を与えますか?