この質問のMSSQLServerの部分について説明しますが、「正しい」答えは、実際にはサポートされている言語とアプリケーションによって異なります。
SQL Serverでテーブルを作成する場合、各テキストフィールドには暗黙的または明示的に指定された照合があります。これは、ソート順と比較動作の両方に影響します。ほとんどの英語(US)ロケールのデフォルトは、Latin1_General_CI_AS、またはLatin 1、大文字と小文字を区別せず、大文字と小文字を区別します。つまり、たとえば、a = Aですが、a!=Äおよびa!=äです。「A」のすべての発音区別符号のバリエーションを同等に扱うアクセント非依存(Latin1_General_CI_AI)を使用することもできます。
一部のロケールは、他のカテゴリの比較をサポートしています。たとえば、フランス語では発音区別符号を含む単語の順序がドイツ語とは多少異なります。トルコ語では、ドットなしのiとドット付きのiは意味的に異なると見なされるため、トルコ語、大文字と小文字を区別しない、アクセントを区別する照合を使用する場合、大文字と小文字を区別しない比較でも一致しません。
データベースごと、テーブルごと、フィールドごと、さらにはクエリごとに、ある程度のコストをかけて照合を変更できます。私の理解では、インデックスは指定された照合順序に従って正規化されます。つまり、インデックスは基本的に元の文字列のフラット化されたバージョンを保持します。たとえば、大文字と小文字を区別しない照合では、Appleとappleはappleとして保存されます。クエリは、検索前に同じ照合でフラット化されます。
日本語では、別の正規化のカテゴリがあります。ここでは、全角形と半幅形の文字がa = のようになり、場合によっては、2つの半幅形の文字が1つの意味的に同等の文字にフラット化されます(バ= 15 ' 最後に、一部の言語では、複合文字を含む別のワックスのボールがあり、孤立した発音区別符号を他の文字で構成できます(たとえば、äのウムラウトは1つの文字であり、単純な形式aで構成されます)。ベトナム語、タイ語、およびその他のいくつかの言語には、このカテゴリのバリエーションがあります。標準形がある場合、Unicode正規化により、合成された形式と分解された形式を同等として扱うことができます。Unicode正規化は通常、比較が行われる前に適用されます。
要約すると、大文字と小文字を区別しない比較では、ASCII範囲の文字列を比較する場合とほぼ同じように行います。たとえば、比較の左側と右側を「小文字に」フラット化してから、配列をバイナリとして比較します。配列。違いは、1)文字列を同じUnicode形式(kCまたはkD)に正規化する必要があることです。2)そのロケールのルールに従って文字列を同じケースに正規化する3)アクセント感度ルールに従ってアクセントを正規化する4)バイナリ比較に従って比較します。4)ソートの場合など、該当する場合は、追加の2次および3次ソート規則を使用して比較します。これには、一部の言語では「M」の前の「Mc」ソートなどに類似したものが含まれます。
そして、はい、Windowsはこれらすべてのルールのテーブルを保存します。コントロールパネルからの東アジア言語サポートと複雑なスクリプトのサポートでそれらのサポートを追加しない限り、すべてのインストールでデフォルトでそれらのすべてを取得するわけではありません。