Share via


照合順序とインターナショナル対応に関する用語

SQL Server の照合順序により、並べ替え規則、大文字と小文字の区別、およびアクセントの区別のプロパティをデータで利用できるようになります。char や varchar などの文字データ型に使用する照合順序は、そのデータ型で表すことのできるコード ページおよび対応する文字を指定します。SQL Server の新しいインスタンスをインストールしているか、データベース バックアップを復元しているか、サーバーをクライアント データベースに接続しているかに関係なく、操作するデータのロケールの要件、並べ替え順序、および大文字と小文字の区別とアクセントの区別について理解することが重要です。

サーバー、データベース、列、または式の照合順序を選択すると、データベースのさまざまな操作の結果に影響を与える特定の特性がデータに割り当てられます。たとえば、ORDER BY を使用してクエリを構築する場合、結果セットの並べ替え順序は、データベースに適用される照合順序、またはクエリの式レベルで COLLATE 句に指定される照合順序に依存します。

照合順序には、次の特性の一部またはすべてが含まれます。

  • 大文字と小文字の区別

  • アクセントの区別

  • かなの区別

  • 文字幅の区別

SQL Server の照合順序サポートを最大限に活用するには、このトピックで定義されている用語と、それらがデータの特性にどのように関連しているかを理解する必要があります。

用語

  • 照合順序

  • ロケール

  • Unicode

  • コード ページ

  • データ型

  • 並べ替え順

照合順序

照合順序は、データセット内の各文字を表すビット パターンを指定します。また、データの並べ替えおよび比較を行うための規則を決定します。SQL Server では、単一のデータベース内で異なる照合順序を使用してオブジェクトを格納することができます。非 Unicode 列の場合は、照合順序の設定によってデータのコード ページと表示可能な文字が指定されます。非 Unicode 列の間を移動するデータは、移動元のコード ページから移動先のコード ページに変換する必要があります。

Transact-SQL ステートメントの結果は、それぞれ異なる照合順序が設定されている複数のデータベースのコンテキストでステートメントが実行される場合には、データベースごとに異なります。可能であれば、組織全体で同じ照合順序を使用してください。これにより、それぞれの文字または Unicode 表現について、照合順序を明示的に指定する必要がなくなります。異なる照合順序とコード ページが設定されたオブジェクトを操作する場合は、照合の優先順位の規則を考慮してクエリを作成します。詳細については、「照合順序の優先順位 (Transact-SQL)」を参照してください。

照合順序の特性は、言語の区別、大文字と小文字の区別、アクセントの区別、かなの区別、および文字幅の区別です。

SQL Server の照合順序には、次の照合順序セットが含まれます。

  • Windows 照合順序
    Windows 照合順序は、関連する Windows システム ロケールに基づく文字データを格納するための規則を定義します。Windows 照合順序では、非 Unicode データの比較が、Unicode データと同じアルゴリズムを使用して実装されます。基本の Windows 照合順序規則では、辞書順の並べ替えが適用される場合に使用される文字または言語と、非 Unicode 文字データの格納に使用されるコード ページを指定します。Unicode 順の並べ替えと非 Unicode 順の並べ替えは、いずれも、特定のバージョンの Windows の文字列比較と互換性があります。このしくみによって SQL Server 内のデータ型に一貫性が生まれ、開発者が SQL Server と同一の規則を使用してアプリケーションで文字列を並べ替えることが可能になります。詳細については、「セットアップでの照合順序の設定」を参照してください。

  • バイナリ照合順序
    バイナリの照合順序では、ロケールおよびデータ型によって定義されるコーディングされた値の順序に基づいてデータを並べ替えます。バイナリ照合順序では大文字と小文字が区別されます。SQL Server のバイナリ照合順序は、使用するロケールおよび ANSI コード ページを定義します。また、バイナリ並べ替え順を実施します。これらは比較的単純なので、バイナリ照合順序はアプリケーションのパフォーマンスを向上させるために役立ちます。非 Unicode データ型の場合は、ANSI コード ページで定義されているコード ポイントに基づいてデータが比較されます。Unicode データ型の場合は、Unicode コード ポイントに基づいてデータが比較されます。Unicode データ型のバイナリ照合順序では、データを並べ替える際にロケールが考慮されません。たとえば、Unicode データに対して Latin_1_General_BIN と Japanese_BIN を使用した場合、並べ替え結果はどちらも同じになります。

    以前のバージョンの SQL Server でのバイナリ照合順序では、最初の文字が WCHAR として比較された後、続いてバイト単位の比較が行われていました。旧バージョンとの互換性を維持するため、既存のバイナリ照合順序セマンティクスは変更されません。

    SQL Server 最新リリースのバイナリ照合順序には、純粋なコード ポイント比較照合順序セットが追加されました。このバイナリ照合順序へ移行すると、完全なコード ポイント比較を利用できます。新しいアプリケーションの開発にはバイナリ照合順序を使用することをお勧めします。新しいコード ポイント照合順序セマンティクスを実装する照合順序名は、BIN2 サフィックスによって識別されます。BIN2 に対応する新しいバイナリ並べ替え用の比較フラグもあります。詳細については、「BIN 照合順序と BIN2 照合順序の使用に関するガイドライン」を参照してください。

  • SQL Server
    SQL Server 照合順序 (SQL_*) では、以前のバージョンの SQL Server と互換性のある並べ替え順が使用されます。非 Unicode データについては、辞書順での並べ替え規則は Windows オペレーティング システムによって提供されるどの並べ替えルーチンとも互換性はありません。ただし、Unicode データの並べ替えは、特定のバージョンの Windows 並べ替え規則と互換性があります。SQL Server 照合順序では非 Unicode データと Unicode データで別々の比較規則を使用するため、基本となるデータ型によっては、同一データの比較で異なる結果が得られる場合があります。詳細については、「SQL Server 照合順序の使用」を参照してください。

    注意注意

    SQL Server の英語インスタンスをアップグレードするときに、SQL Server の既存インスタンスとの互換性のために SQL Server 照合順序 (SQL_*) を指定することができます。SQL Server のインスタンスの既定照合順序がセットアップ時に定義されるため、次のいずれかに該当する場合は、照合順序の設定を注意深く指定することが重要です。

    • アプリケーション コードが以前の SQL Server 照合順序の動作に依存している場合。

    • SQL Server 6.5、または SQL Server 7.0 の既存のインスタンスで SQL Server レプリケーション機能を使用する予定がある場合。

    • 複数の言語に対応する文字データを格納する必要がある場合。

照合順序の設定は、SQL Server のインスタンスの次のレベルでサポートされます。

  • サーバーレベルの照合順序
    既定の照合順序は、SQL Server のセットアップ時に設定され、システム データベースの既定の照合順序にもなります。なお、Unicode 専用の照合順序はサーバー レベルの照合順序としてサポートされないため、SQL Server のセットアップ時に選択することはできません。

    列またはデータベース以外のオブジェクトに照合順序を指定した場合、オブジェクトを削除してから再び作成する以外の方法で照合順序を変更することはできません。SQL Server のインスタンスの既定の照合順序を変更する代わりに、新しいデータベースまたはデータベース列の作成時に照合順序を指定することができます。

    SQL Server のインスタンスのサーバー照合順序を問い合わせるには、次の Transact-SQL SERVERPROPERTY 関数を使用します。

    SELECT CONVERT (varchar, SERVERPROPERTY('collation'))
    

    使用可能なすべての照合順序についてサーバーに照会するには、次の fn_helpcollations() 組み込み関数を使用します。

    SELECT * from ::fn_helpcollations()
    
  • データベースレベルの照合順序
    データベースを作成する際には、CREATE DATABASE ステートメントの COLLATE 句を使用して、データベースの既定の照合順序を指定できます。照合順序を指定しない場合、model データベースの既定の照合順序がデータベースに割り当てられます。model データベースの照合順序は、SQL Server のインスタンスの既定の照合順序と同じです。

    ユーザー データベースの照合順序は、次のような ALTER DATABASE ステートメントを使用して変更できます。

    ALTER DATABASE myDB COLLATE Greek_CS_AI
    

    データベースの現在の照合順序は、次のようなステートメントを使用して取得できます。

    SELECT CONVERT (varchar, DATABASEPROPERTYEX('database_name','collation'))
    
    注意注意

    データベース レベルの照合順序を変更しても、列レベルの照合順序や式レベルの照合順序には影響しません。

  • 列レベルの照合順序
    テーブルを作成する際には、CREATE TABLE ステートメントの COLLATE 句を使用して、文字型の各列に対して照合順序を指定できます。照合順序を指定しない場合、データベースの既定の照合順序が列に割り当てられます。

    列の照合順序は、次のような ALTER TABLE ステートメントを使用して変更できます。

    ALTER TABLE myTable ALTER COLUMN mycol NVARCHAR(10) COLLATE Greek_CS_AI
    
  • 式レベルの照合順序
    式レベルの照合順序は、ステートメントの実行時に設定され、結果セットが返される方法に影響を及ぼします。これにより、ORDER BY の並べ替え結果をロケール固有のものにすることができます。式レベルの照合順序を実装するには、次のような COLLATE 句を使用します。

    SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI
    

トップに戻る

ロケール

ロケールは、場所またはカルチャに関連付けられる一連の情報です。これには、言語の名前や ID、言語の記述に使用されるスクリプト、文化的慣習などがあります。照合順序は、1 つ以上のロケールに関連付けることができます。

トップに戻る

Unicode

複数の言語を反映する文字データを格納する場合は、非 Unicode データ型 (char、varchar、および text) ではなく、Unicode データ型 (nchar、nvarchar、および ntext) を常に使用してください。

非 Unicode データ型には、多くの制限が関連付けられています。これは、Unicode に対応していないコンピュータではコード ページの使用が 1 つに制限されているためです。Unicode コードを使用すると、必要なコード ページ変換が少なくなるので、パフォーマンスの向上が期待できます。Unicode 照合順序は、サーバー レベルではサポートされないため、データベース、列、式の各レベルで個別に選択する必要があります。

クライアントが使用するコード ページは、オペレーティング システムの設定によって決まります。Windows 2000、Windows XP、Windows Server 2003、または Windows Server 2008 オペレーティング システムのクライアント コード ページを設定するには、コントロール パネルの [地域と言語のオプション] を使用します。

データをサーバーからクライアントに移動するとき、古いクライアント ドライバでサーバー照合順序が認識されないことがあります。これは、データを Unicode サーバーから非 Unicode クライアントに移動する場合に発生する可能性があります。最善の対処方法は、クライアント オペレーティング システムをアップグレードして、基になるシステムの照合順序を更新することです。クライアントにデータベース クライアント ソフトウェアがインストールされている場合は、データベース クライアント ソフトウェアにサービスの更新プログラムを適用する方法もあります。

また、サーバー上のデータに異なる照合順序を使用してみることもできます。クライアントのコード ページにマップする照合順序を選択します。詳細については、SQL Server オンライン ブックの「照合順序の設定と変更」を参照してください。

Unicode または非 Unicode データ型の使用に関連する問題点を評価するには、使用環境におけるパフォーマンスの違いを測定するためのシナリオをテストする必要があります。組織内のシステムで使用する照合順序を標準化し、可能であれば Unicode サーバーおよびクライアントを配置するようにしてください。Unicode の詳細については、Unicode コンソーシアムの Web サイトを参照してください。

さまざまな状況で、SQL Server は他のサーバーまたはクライアントとやり取りし、組織ではアプリケーションやサーバー インスタンス間で複数のデータ アクセス標準を使用する可能性があります。SQL Server クライアントは次の 2 つの主要タイプのいずれかになります。

  • OLE DB および Open Database Connectivity (ODBC) Version 3.7 以降のバージョンを使用する Unicode クライアント

  • DB ライブラリおよび ODBC Version 3.6 以前のバージョンを使用する非 Unicode クライアント

以下の表は、Unicode 型サーバーと非 Unicode 型サーバーの各種組み合わせにおける多言語データの使用に関する情報を示しています。

サーバー

クライアント

利点または制限事項

Unicode

Unicode

このシナリオでは、システム全体で Unicode データが使用されるため、最高のパフォーマンスが実現され、取得されるデータが破損から保護されます。これは、ActiveX Data Objects (ADO)、OLE DB、および ODBC Version 3.7 以降のバージョンの場合に該当します。

Unicode

非 Unicode

このシナリオで、特に新しいオペレーティング システムを実行しているサーバーと、古いバージョンの SQL Server または古いオペレーティング システムを実行しているクライアントが接続されている場合、データをクライアント コンピュータに移動するときに制約やエラーが生じることがあります。サーバー上の Unicode データは、非 Unicode クライアント上の対応するコード ページにマップしてデータを変換しようと試みます。

非 Unicode

Unicode

これは、多言語データの使用に理想的な構成とはいえません。Unicode データを非 Unicode サーバーに書き込むことはできません。サーバーのコード ページ内に存在しないサーバーにデータを送信すると、問題が発生する可能性があります。

非 Unicode

非 Unicode

これは、多言語データに関して非常に制限的なシナリオです。使用できるコード ページは 1 つだけです。

データをサーバーからクライアント (特に Unicode サーバーから非 Unicode クライアント) に移動するときにエラーや障害が発生する場合は、サーバー照合順序が古いクライアント ドライバによって認識されていない可能性があります。この場合、最善の対処方法は、クライアント オペレーティング システムをアップグレードして、基になるシステムの照合順序を更新することです。クライアントにデータベース クライアント ソフトウェアがインストールされている場合は、データベース クライアント ソフトウェアにサービスの更新プログラムを適用する方法もあります。

また、サーバー上のデータに異なる照合順序を使用してみることもできます。クライアントのコード ページにマップする照合順序を選択します。照合順序の変更の詳細については、SQL Server オンライン ブックの「SQL Server での照合順序の設定と変更」を参照してください。照合順序の変更の詳細については、「SQL Server ベスト プラクティス照合順序の変更」ホワイト ペーパーを参照してください。非 Unicode データ型から Unicode への移行の詳細については、「SQL Server ベスト プラクティス Unicode への移行」ホワイト ペーパーを参照してください。

関連項目 :Unicode の基礎

トップに戻る

コード ページ

コード ページは、指定したスクリプトの順序付けられた文字セットであり、それぞれの文字には数値インデックスまたはコード ポイント値が関連付けられています。Windows コード ページは、通常は文字セットまたは charset と呼ばれています。コード ページは、各種の Windows システム ロケールで使用される文字セットおよびキーボード レイアウトについてサポートを提供するために使用されます。

Windows Server 2008 Unicode 照合順序は、すべて Unicode 5.0 ベースです。

トップに戻る

データ型

データ型とは、値の範囲、値に関して実行可能な操作、およびメモリでの値の格納方法を指定する定義のことです。データ型を定義すると、SQL Server では、予測可能な方法でデータを操作することが可能になります。非 Unicode 文字データ型は、char、varchar、および text です。Unicode データ型は、nchar、nvarchar、および ntext です。複数の言語を反映する文字データを格納する場合は特に、アプリケーションで Unicode データ型を使用することをお勧めします。

非 Unicode データ型から Unicode への移行の詳細については、「SQL Server ベスト プラクティス Unicode への移行」ホワイト ペーパーを参照してください。

関連項目 :データ型 (データベース エンジン)」、「データ型 (Transact-SQL)」、「Integration Services のデータ型

トップに戻る

並べ替え順

並べ替え順は、データ値の格納方法を指定します。これは、データ比較の結果に影響を及ぼします。データは、照合順序を使用して並べ替えられ、インデックスを使用して最適化することができます。

関連項目 :Windows 照合順序並べ替えスタイル」、「インデックス

トップに戻る