C#中で SQL Server と同じ文字列比較をする (検討中)

まずはSQLServerの NVARCHAR, NCHAR の照合順序にはJapanese_XJIS_100_* を指定するのがよさそう。

http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.server.getstringcomparer.aspx

これを利用して照合順序で文字列比較するような拡張メソッドを作っておくと便利そう、と調べていた。そこで以前読んだ記事

http://blogs.msdn.com/b/sqljapan/archive/2008/06/16/japanese-japanese-xjis-100-japanese-bushu-kakusu-100.aspx

SQL Server に新たに追加された日本語の照合順序名である Japanese_XJIS_100 及び Japanese_Bushu_Kakusu_100 はWindows Vista と Windows Server 2008 で指定可能となった「並べ替え」の内容に沿うような形で追加されています。

SQL Server の照合順序を Japanese_XJIS_100 にしとけば、Vista/WindowsServer 2008 以降のOSの機能と一致するということを言っている。
具体的には、「ひらがなとカタカナは区別する」「全角半角区別しない」「大文字小文字区別しない」 Japanese_XJIS_100_CI_AS_KS を指定した場合、C# からは
    new CultureInfo(0x0411).CompareInfo.Compare(s1, s2, CompareOptions.IgnoreCase | CompareOptions.IgnoreWidth)
による比較が完全に一致するのではないか。

LINQを使っていると、== による文字列の比較がSQL Server側なのか .NET Framework 側なのか分かりにくくトラブルの元。今のところコーディング規約として NVARCHAR については「SQL Server 側は == を使う」「.NET Framework 側(LINQ to Object)は CompareInfo.Compareを使う」といった感じだろうか。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。