12

現在、正規化されたバージョンの文字列を 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 テーブルとプロシージャの独自のコードで小文字の正規化を使用していると矛盾していませんか? すべてを大文字の正規化に切り替えるか、小文字の正規化を使用し続ける必要がありますか?

4

3 に答える 3

9

CA1308によると、これを行う理由は、一部の文字を大文字から小文字に往復変換できないためです。重要なことは、常に一方向に移動することです。そのため、標準が常に小文字に移動する場合は、それを変更する理由はありません。

于 2009-04-21T17:44:09.307 に答える
4

最初の質問に答えると、はい、Microsoft は少し一貫性がありません。2 番目の質問に答えるには、アプリケーションでボトルネックが発生していることを確認するまで、何も切り替えないでください。

すべてを切り替えて時間を無駄にするのではなく、プロジェクトをどれだけ前進できるかを考えてください。開発時間は、そのような変更から得られる節約よりもはるかに価値があります。

覚えて:

時期尚早の最適化は、プログラミングにおけるすべての悪 (または少なくともその大部分) の根源です。-ドナルド・クヌース

于 2009-04-21T17:38:03.457 に答える
-2

小文字の正規化を引き続き使用します。大きな問題が発生した場合にのみ、Microsoft の標準に準拠するように変更してください。

これは残念ですが、価値があります。悲しいことに、Microsoft の「標準」はあまり考慮されておらず、一貫性に欠ける傾向があります。彼らとの経験から、やむを得ない理由がない限り、機能している間は機能するものに固執するのが最善であることが示されています. これは通常、Microsoft 以外のテクノロジには当てはまらないことに注意してください。しかし、Microsoft の「標準」の恣意性により、それらは避ける価値があります。

編集:ここで明確にする必要があります。Microsoft の基準に関する長年の経験から、Microsoft に対する私の意見は非常に低いものです。コメントで指摘されたように、「マイクロソフト以外のすべての人」について指摘する特定の参照はありません。これは私の個人的な経験から来ています。あなたの走行距離は大きく異なる場合があります。この答えは、本当に私の意見と見なされるべきです。それをもっと明確にしなかったことをお詫びします。

于 2009-04-21T17:44:14.783 に答える