ディレクトリ
[========]
SQL Serverの照合順序
影響を及ぼす
照合は、グループステートメントの順に適用されます。
Chinese_PRC_CI_AS:デフォルトの中国語版Windowsは、データベースの照合に使用されるシステムにインストールされています
オプション | 説明 |
---|---|
大文字と小文字を区別(_CS ) |
大文字と小文字を区別します。あなたはこの種を選択した場合は対応で大文字小文字の前に。このオプションが選択されていない場合、照合は大文字と小文字を区別しません。そのSQL Serverは、同じように大文字と小文字をソートする場合。指定することで_CI 、あなたはいない明示的に大文字と小文字を区別しないこともできます。 |
アクセント(_AS ) |
アクセント付き文字と非アクセント付き文字を区別する。例えば、異なる文字として「」と「A」。このオプションが選択されていない場合、照合がアクセントません。SQL Serverがアクセント分類し、アクセントのないフォームの文字の形が同じと考えられているときです。指定することで_AI 、明示的ではないアクセントを選択することができます。 |
幅と区別(_WS ) |
全角文字と半角文字を区別します。このオプションが選択されていない場合、SQL Serverは、ご注文時と同じように同じ文字のフル幅とハーフ幅のフォームになります。このオプションを省略した幅の区別を指定するための唯一の方法ではありません。 |
参考:
照合順序とUnicodeのサポート
、詳細なSQL Server照合順序の原則
デモンストレーション効果
次のようにテーブルの構造は次のとおりです。
照合:
- Chinese_PRC_CS_AS_WS幅の場合のストレスに名前を付けます
- 幅-SSS Chinese_PRC_CI_AI_WS
データ:
id,name,sss
1,123aaa啊,啊
2,123aaa啊(),啊aaa()
3,123aaa啊(),啊aaa()
4,123AAA啊(),啊AAA()
クエリ:
select * from dbo.Table_1
where name = '123aaa啊()'
select * from dbo.Table_1
where sss = '啊aaa()'
出力:
- 最終的なマッチング結果に、チェックインに敏感な、と幅
- 幅検査、ケースを2つに、マッチングの最終結果をチェックされていません
データベースの照合順序を変更します
照合レベル:
- サーバーレベルの照合
- データベースレベルの照合
- 列レベルの照合
- 式レベルの照合順序
サーバーレベルの照合
デフォルトのサーバーの照合は、デフォルトの照合範囲を設定するためのオペレーティングシステム(OS)によって決定され、SQL Serverのインストール・プロセス中に配置されています。これは、デフォルトの照合システムデータベースおよびすべてのユーザーデータベースとなります。
データベースレベルの照合
データベースを作成または変更する場合、使用するデータベースのCREATEまたはALTER DATABASEステートメントCOLLATE句は、デフォルトデータベースの照合順序を指定します。照合が指定されていない場合、サーバーはデータベースの照合順序を割り当てます。
あなたがない限り、サーバーの照合順序を変更、またはシステムデータベースの照合順序を変更することはできません。
あなたは、データベースの照合順序を変更することができます。
ALTER DATABASE myDB COLLATE Chinese_PRC_CS_AS_WS;
重要:既存の列レベルの照合順序や表現レベルの照合順序には影響しませんデータベースレベルの照合順序を変更します。
列レベルの照合
あなたがテーブルを作成または変更するときは、使用することができCOLLATE
、各文字列の照合順序を指定するには、句を。照合を指定しない場合、列はデータベースの既定の照合順序が割り当てられます。
あなたは、次の使用することができALTER TABLE
、列の照合順序を変更する声明を:
ALTER TABLE myTable ALTER COLUMN mycol NVARCHAR(10) COLLATE Chinese_PRC_CS_AS_WS;
問合せは、ルールを指定します
クエリ添加した後COLLATE
、上記第二のクエリなどのステートメントを、これが唯一の結果で発見されるであろう。
select * from dbo.Table_1
where sss = '啊aaa()' collate Chinese_PRC_CS_AS_WS
提案
Unicodeデータ型を使用します
使用Unicodeのデータ型(nchar、nvarchar、およびntext型)の代わりに、非Unicodeデータ型(CHAR、VARCHAR、およびテキスト)。
Unicodeは、ビットが標準文字にマッピングされるコードです。それは世界のすべての言語のすべての文字を包含することが意図されているため、異なるコードページを使用して、異なる文字セットに対処する必要はありません。国際的な顧客データベースをサポートし、常にUnicodeデータ型を使用する必要があり、非Unicodeデータ型のために使用すべきではありません。
注
Unicodeデータ・タイプの場合、データベースエンジンは、UCS-2文字で表される65,535まで使用することができ、あるいは、補助文字場合、Unicodeは、全範囲(1114111文字)を表すことができます。補助文字を有効にする方法の詳細については、以下を参照してください。補助文字。
バイナリ照合を持ちます
バイナリ照合順序は、大文字と小文字が区別されます。
以下のための非 Unicode
データ型、ANSIコードページで定義された符号ビットを比較に基づい。
以下のためのUnicode
データ・タイプに関係なくロケールの、Unicodeコードを比較することに基づきます。比較は、比較的単純なUnicodeコードであるため、バイナリ照合は、したがって、アプリケーションのパフォーマンスを改善するのに役立ちます。
SQL Serverのバイナリ照合の2種類があります。
- BIN照合では、符号ビット順序に従って最初の文字は、文字の残りのバイトは、値をソート。
- BIN2照合を更新し、すべての文字は、そのコードビットに応じて注文しました。