現在、正規化されたバージョンの文字列を SQL Server データベースに小文字で保存しています。たとえば、Users テーブルには、UserName フィールドと LoweredUserName フィールドがあります。コンテキストに応じて、T-SQL の LOWER() 関数または C# の String.ToLower() メソッドを使用して、小文字バージョンのユーザー名を生成し、LoweredUserName フィールドに入力します。Microsoft のガイドラインとVisual Studio のコード分析規則 CA1308によると、ToLower() の代わりに C# の String.ToUpperInvariant() を使用する必要があります。Microsoft によると、これはパフォーマンスとグローバリゼーションの問題の両方です。大文字への変換は安全ですが、小文字への変換は情報の損失を引き起こす可能性があります (たとえば、トルコ語の 'I' 問題)。
文字列の正規化に ToUpperInvariant を使用するようになった場合、データベース スキーマも変更する必要があります。これは、スキーマがMicrosoft の ASP.NET メンバーシップフレームワーク (この関連する質問を参照) に基づいているためです。これは、文字列を小文字に正規化します。
Microsoft は、C# で大文字の正規化を使用するように指示しているのに、Membership テーブルとプロシージャの独自のコードで小文字の正規化を使用していると矛盾していませんか? すべてを大文字の正規化に切り替えるか、小文字の正規化を使用し続ける必要がありますか?