Collation and Unicode SupportCollation and Unicode Support

適用対象: ○SQL Server ○Azure SQL Database○Azure SQL Data Warehouse ○Parallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

SQL ServerSQL Server の照合順序により、並べ替え規則、大文字と小文字の区別、およびアクセントの区別のプロパティをデータで利用できるようになります。Collations in SQL ServerSQL Server provide sorting rules, case, and accent sensitivity properties for your data. charvarchar などの文字データ型に使用する照合順序は、そのデータ型で表すことのできるコード ページおよび対応する文字を指定します。Collations that are used with character data types such as char and varchar dictate the code page and corresponding characters that can be represented for that data type. SQL ServerSQL Server の新しいインスタンスをインストールしているか、データベース バックアップを復元しているか、サーバーをクライアント データベースに接続しているかに関係なく、操作するデータのロケールの要件、並べ替え順序、および大文字と小文字の区別とアクセントの区別について理解することが重要です。Whether you are installing a new instance of SQL ServerSQL Server, restoring a database backup, or connecting server to client databases, it is important that you understand the locale requirements, sorting order, and case and accent sensitivity of the data that you are working with. SQL ServerSQL Serverのインスタンスで使用可能な照合順序の一覧については、「 sys」を参照してください。fn_helpcollations (Transact-SQL)」を参照してください。To list the collations available on your instance of SQL ServerSQL Server, see sys.fn_helpcollations (Transact-SQL).

サーバー、データベース、列、または式の照合順序を選択すると、データベースのさまざまな操作の結果に影響を与える特定の特性がデータに割り当てられます。When you select a collation for your server, database, column, or expression, you are assigning certain characteristics to your data that affects the results of many operations in the database. たとえば、ORDER BY を使用してクエリを構築する場合、結果セットの並べ替え順序は、データベースに適用される照合順序、またはクエリの式レベルで COLLATE 句に指定される照合順序に依存します。For example, when you construct a query by using ORDER BY, the sort order of your result set might depend on the collation that is applied to the database or dictated in a COLLATE clause at the expression level of the query.

SQL ServerSQL Serverの照合順序サポートを最大限に活用するには、このトピックで定義されている用語と、それらがデータの特性にどのように関連しているかを理解する必要があります。To best use collation support in SQL ServerSQL Server, you must understand the terms that are defined in this topic, and how they relate to the characteristics of your data.

照合順序の用語Collation Terms

照合順序Collation

照合順序は、データセット内の各文字を表すビット パターンを指定します。A collation specifies the bit patterns that represent each character in a data set. また、照合順序はデータの並べ替えおよび比較を行うための規則を決定します。Collations also determine the rules that sort and compare data. SQL ServerSQL Server では、単一のデータベース内で異なる照合順序を持つオブジェクトを格納できます。 supports storing objects that have different collations in a single database. 非 Unicode 列の場合は、照合順序の設定によってデータのコード ページと表示可能な文字が指定されます。For non-Unicode columns, the collation setting specifies the code page for the data and which characters can be represented. 非 Unicode 列の間を移動するデータは、移動元のコード ページから移動先のコード ページに変換する必要があります。Data that is moved between non-Unicode columns must be converted from the source code page to the destination code page.

Transact-SQLTransact-SQL ステートメントの結果は、それぞれ異なる照合順序が設定されている複数のデータベースのコンテキストでステートメントが実行される場合には、データベースごとに異なります。 statement results can vary when the statement is run in the context of different databases that have different collation settings. 可能であれば、組織全体で同じ照合順序を使用してください。If it is possible, use a standardized collation for your organization. これにより、それぞれの文字または Unicode 表現について、照合順序を明示的に指定する必要がなくなります。This way, you do not have to explicitly specify the collation in every character or Unicode expression. 異なる照合順序とコード ページが設定されたオブジェクトを操作する場合は、照合の優先順位の規則を考慮してクエリを作成します。If you must work with objects that have different collation and code page settings, code your queries to consider the rules of collation precedence. 詳細については、「 照合順序の優先順位 (Transact-SQL)」を参照してください。For more information, see Collation Precedence (Transact-SQL).

照合順序に関連するオプションは、大文字と小文字の区別、アクセントの区別、かなの区別、および文字幅の区別、バリエーションの選択の区別です。The options associated with a collation are case sensitivity, accent sensitivity, Kana-sensitivity, width sensitivity, variation-selector-sensitivity. これらのオプションは、照合順序の名前に付加することによって指定されます。These options are specified by appending them to the collation name. たとえば、 Japanese_Bushu_Kakusu_100_CS_AS_KS_WS という照合順序では、大文字と小文字、アクセント、かな、および文字幅が区別されます。For example, this collation Japanese_Bushu_Kakusu_100_CS_AS_KS_WS is case-sensitive, accent-sensitive, Kana-sensitive, and width-sensitive. また、 Japanese_Bushu_Kakusu_140_CI_AI_KS_WS_VSS という照合順序では、大文字小文字とアクセントが区別されず、かな、文字幅、バリエーションの選択が区別されます。As another example, this collation Japanese_Bushu_Kakusu_140_CI_AI_KS_WS_VSS is case-insensitive, accent-insensitive, Kana-sensitive, width-sensitive, and variation-selector-sensitive. 次の表は、これらの各オプションに関連付けられている動作を示しています。The following table describes the behavior associated with these various options.

オプションOption [説明]Description
大文字と小文字を区別する (_CS)Case-sensitive (_CS) 大文字と小文字を区別します。Distinguishes between uppercase and lowercase letters. このオプションを選択すると、大文字より先に小文字が並べ替えられます。If selected, lowercase letters sort ahead of their uppercase versions. このオプションを選択しないと、照合順序で大文字と小文字が区別されません。If this option is not selected, the collation is case-insensitive. つまり、大文字と小文字は、並べ替えを行う際に同じものと見なされます。That is, SQL Server considers the uppercase and lowercase versions of letters to be identical for sorting purposes. 大文字と小文字を区別しないことを明示的に選択するには、_CI と指定します。You can explicitly select case insensitivity by specifying _CI.
アクセントを区別する (_AS)Accent-sensitive (_AS) アクセントのある文字とアクセントのない文字を区別します。Distinguishes between accented and unaccented characters. たとえば、"a" と "á" は等しくありません。For example, 'a' is not equal to 'ấ'. このオプションを選択しないと、照合順序でアクセントが区別されません。If this option is not selected, the collation is accent-insensitive. つまり、アクセントのある文字とアクセントのない文字は、並べ替えを行う際に同じものと見なされます。That is, SQL Server considers the accented and unaccented versions of letters to be identical for sorting purposes. アクセントを区別しないことを明示的に選択するには、_AI と指定します。You can explicitly select accent insensitivity by specifying _AI.
かなを区別する (_KS)Kana-sensitive (_KS) ひらがなとカタカナという日本語の 2 種類のかな文字を区別します。Distinguishes between the two types of Japanese kana characters: Hiragana and Katakana. このオプションを選択しないと、照合順序でかなが区別されません。If this option is not selected, the collation is Kana-insensitive. つまり、ひらがなとカタカナは、並べ替えを行う際に同じものと見なされます。That is, SQL Server considers Hiragana and Katakana characters to be equal for sorting purposes. かなを区別しないように指定する唯一の方法は、このオプションを省略することです。Omitting this option is the only method of specifying Kana-insensitivity.
文字幅を区別する (_WS)Width-sensitive (_WS) 全角文字と半角文字を区別します。Distinguishes between full-width and half-width characters. このオプションを選択しないと、同じ文字の全角表現と半角表現は、並べ替えを行う際に同じものと見なされます。If this option is not selected, SQL Server considers the full-width and half-width representation of the same character to be identical for sorting purposes. 文字幅を区別しないように指定する唯一の方法は、このオプションを省略することです。Omitting this option is the only method of specifying width-insensitivity.
バリエーションの選択を区別する (_VSS)Variation-selector-sensitive (_VSS) SQL Server 2017 (14.x)SQL Server 2017 (14.x)から導入された日本語の照合順序 Japanese_Bushu_Kakusu_140 と Japanese_XJIS_140 で多様な表意文字のバリエーションの選択を区別します。Distinguishes between various ideographic variation selectors in Japanese collations Japanese_Bushu_Kakusu_140 and Japanese_XJIS_140 first introduced in SQL Server 2017 (14.x)SQL Server 2017 (14.x). バリエーションのシーケンスは、基本文字と追加のバリエーションの選択で構成されます。A variation sequence consists of a base character plus an additional variation selector. この _VSS オプションが選択されていない場合、照合順序はバリエーションの選択が区別されず、バリエーションの選択は比較で考慮されません。If this _VSS option is not selected, the collation is variation selector insensitive, and the variation selector is not considered in the comparison. つまり、SQL Server では、並べ替えが同じになるように、バリエーションの選択が異なる同じ基本文字に基づいて構築された文字を考慮しています。That is, SQL Server considers characters built upon the same base character with differing variation selectors to be identical for sorting purposes. 「Unicode Ideographic Variation Database」(Unicode 表意文字のバリエーション データベース) も参照してください。See also Unicode Ideographic Variation Database.

異体字セレクターを区別する (_VSS) 照合順序は、全文検索インデックスではサポートされていません。Variation selector sensitive (_VSS) collations are not supported in Full-text search indexes. 全文検索インデックスでは、アクセントを区別する (_AS)、かなを区別する (_KS)、文字幅を区別する (_WS) オプションのみがサポートされます。Full-text search indexes support only Accent-Sensitive (_AS), Kana-sensitive (_KS), and Width-sensitive (_WS) options. SQL Server XML と CLR のエンジンでは、(_VSS) 異体字セレクターはサポートされていません。SQL Server XML and CLR engines do not support (_VSS) Variation selectors.

SQL ServerSQL Server では、次の照合順序のセットをサポートしています。 supports the following collation sets:

Windows 照合順序Windows collations
Windows 照合順序は、関連する Windows システム ロケールに基づく文字データを格納するための規則を定義します。Windows collations define rules for storing character data that are based on an associated Windows system locale. Windows 照合順序では、非 Unicode データの比較が、Unicode データと同じアルゴリズムを使用して実装されます。For a Windows collation, comparison of non-Unicode data is implemented by using the same algorithm as Unicode data. 基本の Windows 照合順序規則では、辞書順の並べ替えが適用される場合に使用される文字または言語と、非 Unicode 文字データの格納に使用されるコード ページを指定します。The base Windows collation rules specify which alphabet or language is used when dictionary sorting is applied, and the code page that is used to store non-Unicode character data. Unicode 順の並べ替えと非 Unicode 順の並べ替えは、いずれも、特定のバージョンの Windows の文字列比較と互換性があります。Both Unicode and non-Unicode sorting are compatible with string comparisons in a particular version of Windows. このしくみによって SQL ServerSQL Server 内のデータ型に一貫性が生まれ、開発者が SQL ServerSQL Server と同一の規則を使用してアプリケーションで文字列を並べ替えることが可能になります。This provides consistency across data types within SQL ServerSQL Server, and it also lets developers sort strings in their applications by using the same rules that are used by SQL ServerSQL Server. 詳細については、「Windows 照合順序名 (Transact-SQL)」を参照してください。For more information, see Windows Collation Name (Transact-SQL).

バイナリ照合順序Binary collations
バイナリ照合順序では、ロケールおよびデータ型によって定義されるコーディングされた値の順序に基づいてデータを並べ替えます。Binary collations sort data based on the sequence of coded values that are defined by the locale and data type. バイナリ照合順序では大文字と小文字が区別されます。They are case sensitive. SQL ServerSQL Server のバイナリ照合順序は、使用するロケールおよび ANSI コード ページを定義します。A binary collation in SQL ServerSQL Server defines the locale and the ANSI code page that is used. また、バイナリ並べ替え順を実施します。This enforces a binary sort order. これらは比較的単純なので、バイナリ照合順序はアプリケーションのパフォーマンスを向上させるために役立ちます。Because they are relatively simple, binary collations help improve application performance. 非 Unicode データ型の場合は、ANSI コード ページで定義されているコード ポイントに基づいてデータが比較されます。For non-Unicode data types, data comparisons are based on the code points that are defined in the ANSI code page. Unicode データ型の場合は、Unicode コード ポイントに基づいてデータが比較されます。For Unicode data types, data comparisons are based on the Unicode code points. Unicode データ型のバイナリ照合順序では、データを並べ替える際にロケールが考慮されません。For binary collations on Unicode data types, the locale is not considered in data sorts. たとえば、Unicode データに対して Latin_1_General_BIN と Japanese_BIN を使用した場合、並べ替え結果はどちらも同じになります。For example, Latin_1_General_BIN and Japanese_BIN yield identical sorting results when they are used on Unicode data.

SQL ServerSQL Serverには、古い BIN 照合順序と新しい BIN2 照合順序の 2 種類のバイナリ照合順序があります。There are two types of binary collations in SQL ServerSQL Server; the older BIN collations and the newer BIN2 collations. BIN2 照合順序では、すべての文字がコード ポイントに従って並び替えられます。In a BIN2 collation all characters are sorted according to their code points. BIN 照合順序では、最初の文字のみがコード ポイントに従って並び替えられ、残りの文字はバイト値に従って並び替えられます。In a BIN collation only the first character is sorted according to the code point, and remaining characters are sorted according to their byte values. (Intel プラットフォームはリトル エンディアン アーキテクチャであるため、Unicode コード文字は常にバイト スワップして格納されます)。(Because the Intel platform is a little endian architecture, Unicode code characters are always stored byte-swapped.)

SQL Server 照合順序SQL Server collations
SQL ServerSQL Server 照合順序 (SQL_*) では、以前のバージョンの SQL ServerSQL Serverと互換性のある並べ替え順が使用されます。 collations (SQL_*) provide sort order compatibility with earlier versions of SQL ServerSQL Server. 非 Unicode データについては、辞書順での並べ替え規則は Windows オペレーティング システムによって提供されるどの並べ替えルーチンとも互換性はありません。The dictionary sorting rules for non-Unicode data are incompatible with any sorting routine that is provided by Windows operating systems. ただし、Unicode データの並べ替えは、特定のバージョンの Windows 並べ替え規則と互換性があります。However, sorting Unicode data is compatible with a particular version of Windows sorting rules. SQL ServerSQL Server 照合順序では非 Unicode データと Unicode データで別々の比較規則を使用するため、基本となるデータ型によっては、同一データの比較で異なる結果が得られる場合があります。Because SQL ServerSQL Server collations use different comparison rules for non-Unicode and Unicode data, you see different results for comparisons of the same data, depending on the underlying data type. 詳細については、「SQL Server 照合順序名 (Transact-SQL)」を参照してください。For more information, see SQL Server Collation Name (Transact-SQL).

注意

SQL ServerSQL Server の英語インスタンスをアップグレードするときに、 SQL ServerSQL Server の既存インスタンスとの互換性のために SQL ServerSQL Server 照合順序 (SQL_*) を指定することができます。When you upgrade an English-language instance of SQL ServerSQL Server, SQL ServerSQL Server collations (SQL_*) can be specified for compatibility with existing instances of SQL ServerSQL Server. SQL ServerSQL Server のインスタンスの既定照合順序がセットアップ時に定義されるため、次のいずれかに該当する場合は、照合順序の設定を注意深く指定するようにしてください。Because the default collation for an instance of SQL ServerSQL Server is defined during setup, make sure that you specify collation settings carefully when the following are true:

  • アプリケーション コードが以前の SQL ServerSQL Server 照合順序の動作に依存している場合。Your application code depends on the behavior of previous SQL ServerSQL Server collations.
    • 複数の言語に対応する文字データを格納する必要がある場合。You must store character data that reflects multiple languages.

照合順序の設定は、 SQL ServerSQL Serverのインスタンスの次のレベルでサポートされます。Setting collations are supported at the following levels of an instance of SQL ServerSQL Server:

サーバーレベルの照合順序Server-level collations
既定のサーバー照合順序は、 SQL ServerSQL Server のセットアップ時に設定され、システム データベースおよびすべてのユーザー データベースの既定の照合順序にもなります。The default server collation is set during SQL ServerSQL Server setup, and also becomes the default collation of the system databases and all user databases. なお、Unicode 専用の照合順序はサーバーレベルの照合順序としてサポートされないため、 SQL ServerSQL Server のセットアップ時に選択することはできません。Note that Unicode-only collations cannot be selected during SQL ServerSQL Server setup because they are not supported as server-level collations.

サーバーに照合順序を指定した後は、照合順序を簡単には変更できません。変更するには、すべてのデータベース オブジェクトとデータをエクスポートし、 master データベースを再構築してから、すべてのデータベース オブジェクトとデータをインポートする必要があります。After a collation has been assigned to the server, you cannot change the collation except by exporting all database objects and data, rebuilding the master database, and importing all database objects and data. SQL ServerSQL Serverのインスタンスの既定の照合順序を変更する代わりに、新しいデータベースまたはデータベース列の作成時に、目的の照合順序を指定することができます。Instead of changing the default collation of an instance of SQL ServerSQL Server, you can specify the desired collation at the time that you create a new database or database column.

データベースレベルの照合順序Database-level collations
データベースを作成または修正する際には、CREATE DATABASE または ALTER DATABASE ステートメントの COLLATE 句を使用して、データベースの既定の照合順序を指定できます。When a database is created or modified, you can use the COLLATE clause of the CREATE DATABASE or ALTER DATABASE statement to specify the default database collation. 照合順序が指定されない場合、データベースにはサーバーの照合順序が割り当てられます。If no collation is specified, the database is assigned the server collation.

サーバーの照合順序を変更すること以外に、システム データベースの照合順序を変更する方法はありません。You cannot change the collation of system databases except by changing the collation for the server.

データベースの照合順序は、データベース内のすべてのメタデータで使用され、データベース内で使用されるすべての文字列型の列、一時オブジェクト、変数名、およびその他のすべての文字列の既定値になります。The database collation is used for all metadata in the database, and is the default for all string columns, temporary objects, variable names, and any other strings used in the database. ユーザー データベースの照合順序を変更する場合は、データベースのクエリが一時テーブルにアクセスするときに照合順序が競合する可能性があります。When you change the collation of a user database, there can be collation conflicts when queries in the database access temporary tables. 一時テーブルは常に tempdb システム データベースに格納され、このデータベースではインスタンスの照合順序が使用されます。Temporary tables are always stored in the tempdb system database, which uses the collation for the instance. ユーザー データベースと tempdb の文字データを比較するクエリは、文字データの評価で照合順序が競合すると、失敗します。Queries that compare character data between the user database and tempdb may fail if the collations cause a conflict in evaluating the character data. この問題は、クエリに COLLATE 句を指定することで解決できます。You can resolve this by specifying the COLLATE clause in the query. 詳細については、「COLLATE (Transact-SQL)」を参照してください。For more information, see COLLATE (Transact-SQL).

列レベルの照合順序Column-level collations
テーブルを作成または変更するときに、COLLATE 句を使用して、文字列型の各列に対して照合順序を指定できます。When you create or alter a table, you can specify collations for each character-string column by using the COLLATE clause. 照合順序を指定しない場合、データベースの既定の照合順序が列に割り当てられます。If no collation is specified, the column is assigned the default collation of the database.

式レベルの照合順序Expression-level collations
式レベルの照合順序は、ステートメントの実行時に設定され、結果セットが返される方法に影響を及ぼします。Expression-level collations are set when a statement is run, and they affect the way a result set is returned. これにより、ORDER BY の並べ替え結果をロケール固有のものにすることができます。This enables ORDER BY sort results to be locale-specific. 式レベルの照合順序を実装するには、次のような COLLATE 句を使用します。Use a COLLATE clause such as the following to implement expression-level collations:

SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI;    

ロケールLocale

ロケールは、場所またはカルチャに関連付けられる一連の情報です。A locale is a set of information that is associated with a location or a culture. これには、言語の名前や ID、言語の記述に使用される文字表記、文化的慣習などがあります。This can include the name and identifier of the spoken language, the script that is used to write the language, and cultural conventions. 照合順序は、1 つ以上のロケールに関連付けることができます。Collations can be associated with one or more locales. 詳細については、「 Microsoft によって割り当てられているロケール ID」を参照してください。For more information, see Locale IDs Assigned by Microsoft.

Code PageCode Page

コード ページは、特定の文字表記の順序付けられた文字のセットです。コード ページでは、数値インデックス (コード ポイント値) が各文字に関連付けられます。A code page is an ordered set of characters of a given script in which a numeric index, or code point value, is associated with each character. Windows コード ページは、通常は 文字セット または charsetと呼ばれています。A Windows code page is typically referred to as a character set or charset. コード ページは、各種の Windows システム ロケールで使用される文字セットおよびキーボード レイアウトをサポートするために使用されます。Code pages are used to provide support for the character sets and keyboard layouts that are used by different Windows system locales.

Sort OrderSort Order

並べ替え順序は、データ値の並べ替え方法を指定します。Sort order specifies how data values are sorted. これは、データ比較の結果に影響を及ぼします。This affects the results of data comparison. データは、照合順序を使用して並べ替えられ、インデックスを使用して最適化することができます。Data is sorted by using collations, and it can be optimized by using indexes.

Unicode のサポートUnicode Support

Unicode は、コード ポイントを文字にマップするための標準です。Unicode is a standard for mapping code points to characters. Unicode は世界中のすべての言語のすべての文字を処理できるようにデザインされているので、異なる文字のセットを扱うために他のコード ページを必要とすることがありません。Because it is designed to cover all the characters of all the languages of the world, there is no need for different code pages to handle different sets of characters. 複数の言語を反映する文字データを格納する場合は、非 Unicode データ型 (charvarchar、および text) ではなく、Unicode データ型 (ncharnvarchar、および ntext) を常に使用してください。If you store character data that reflects multiple languages, always use Unicode data types (nchar, nvarchar, and ntext) instead of the non-Unicode data types (char, varchar, and text).

非 Unicode データ型には、多くの制限が関連付けられています。Significant limitations are associated with non-Unicode data types. これは、Unicode に対応していないコンピューターではコード ページの使用が 1 つに制限されているためです。This is because a non-Unicode computer is limited to use of a single code page. Unicode コードを使用すると、必要なコード ページ変換が少なくなるので、パフォーマンスの向上が期待できます。You might experience performance gain by using Unicode because fewer code-page conversions are required. Unicode 照合順序は、サーバー レベルではサポートされないため、データベース、列、式の各レベルで個別に選択する必要があります。Unicode collations must be selected individually at the database, column, or expression level because they are not supported at the server level.

クライアントが使用するコード ページは、オペレーティング システムの設定によって決まります。The code pages that a client uses are determined by the operating system settings. Windows オペレーティング システムでクライアント コード ページを設定するには、コントロール パネルの [地域と言語のオプション] を使用します。To set client code pages on the Windows operating system, use Regional Settings in Control Panel.

データをサーバーからクライアントに移動するとき、古いクライアント ドライバーでサーバー照合順序が認識されないことがあります。When you move data from a server to a client, your server collation might not be recognized by older client drivers. これは、データを Unicode サーバーから非 Unicode クライアントに移動する場合に発生する可能性があります。This can occur when you move data from a Unicode server to a non-Unicode client. 最善の対処方法は、クライアント オペレーティング システムをアップグレードして、基になるシステムの照合順序を更新することです。Your best option might be to upgrade the client operating system so that the underlying system collations are updated. クライアントにデータベース クライアント ソフトウェアがインストールされている場合は、データベース クライアント ソフトウェアにサービスの更新プログラムを適用する方法もあります。If the client has database client software installed, you might consider applying a service update to the database client software.

また、サーバー上のデータに異なる照合順序を使用してみることもできます。You can also try to use a different collation for the data on the server. クライアントのコード ページにマップする照合順序を選択します。Choose a collation that maps to a code page on the client.

一部の Unicode 文字の検索と並べ替えの機能を向上させるために SQL Server 2017SQL Server 2017 で提供される UTF-16 照合順序を使うには (Windows 照合順序のみ)、補助文字 (_SC) の照合順序の 1 つ、またはバージョン 140 の照合順序の 1 つを選ぶことができます。To use the UTF-16 collations available in SQL Server 2017SQL Server 2017 to improve searching and sorting of some Unicode characters (Windows collations only), you can select either one of the supplementary characters (_SC) collations or one of the version 140 collations.

Unicode または非 Unicode データ型の使用に関連する問題点を評価するには、使用環境におけるパフォーマンスの違いを測定するためのシナリオをテストする必要があります。To evaluate issues that are related to using Unicode or non-Unicode data types, test your scenario to measure performance differences in your environment. 組織内のシステムで使用する照合順序を標準化し、可能であれば Unicode サーバーおよびクライアントを配置するようにしてください。It is a good practice to standardize the collation that is used on systems across your organization, and deploy Unicode servers and clients wherever possible.

さまざまな状況で、 SQL ServerSQL Server は他のサーバーまたはクライアントとやり取りし、組織ではアプリケーションやサーバー インスタンス間で複数のデータ アクセス標準を使用する可能性があります。In many situations, SQL ServerSQL Server interacts with other servers or clients, and your organization might use multiple data access standards between applications and server instances. SQL ServerSQL Server クライアントは次の 2 つの主要タイプのいずれかになります。 clients are one of two main types:

  • OLE DB および Open Database Connectivity (ODBC) Version 3.7 以降のバージョンを使用するUnicode クライアント Unicode clients that use OLE DB and Open Database Connectivity (ODBC) version 3.7 or a later version.

  • DB ライブラリおよび ODBC Version 3.6 以前のバージョンを使用する非 Unicode クライアント Non-Unicode clients that use DB-Library and ODBC version 3.6 or an earlier version.

    以下の表は、Unicode 型サーバーと非 Unicode 型サーバーの各種の組み合わせにおける多言語データの使用に関する情報を示しています。The following table provides information about using multilingual data with various combinations of Unicode and non-Unicode servers.

[サーバー]Server クライアントClient 利点または制限事項Benefits or Limitations
UnicodeUnicode UnicodeUnicode このシナリオでは、システム全体で Unicode データが使用されるため、最高のパフォーマンスが実現され、取得されるデータが破損から保護されます。Because Unicode data is used throughout the system, this scenario provides the best performance and protection from corruption of retrieved data. これは、ActiveX Data Objects (ADO)、OLE DB、および ODBC Version 3.7 以降のバージョンの場合に該当します。This is the situation with ActiveX Data Objects (ADO), OLE DB, and ODBC version 3.7 or a later version.
UnicodeUnicode 非 UnicodeNon-Unicode このシナリオで、特に新しいオペレーティング システムを実行しているサーバーと、古いバージョンの SQL ServerSQL Serverまたは古いオペレーティング システムを実行しているクライアントが接続されている場合、データをクライアント コンピューターに移動するときに制約やエラーが生じることがあります。In this scenario, especially with connections between a server that is running a newer operating system and a client that is running an older version of SQL ServerSQL Server, or on an older operating system, there can be limitations or errors when you move data to a client computer. サーバー上の Unicode データは、非 Unicode クライアント上の対応するコード ページにマップしてデータを変換しようと試みます。Unicode data on the server tries to map to a corresponding code page on the non-Unicode client to convert the data.
非 UnicodeNon-Unicode UnicodeUnicode これは、多言語データの使用に理想的な構成とはいえません。This is not an ideal configuration for using multilingual data. Unicode データを非 Unicode サーバーに書き込むことはできません。You cannot write Unicode data to the non-Unicode server. サーバーのコード ページ内に存在しないサーバーにデータを送信すると、問題が発生する可能性があります。Problems are likely to occur when data is sent to servers that are outside the server's code page.
非 UnicodeNon-Unicode 非 UnicodeNon-Unicode これは、多言語データに関して非常に制限的なシナリオです。This is a very limiting scenario for multilingual data. 使用できるコード ページは 1 つだけです。You can use only a single code page.

補助文字Supplementary Characters

SQL ServerSQL Server では、Unicode データの格納用に、 ncharnvarchar などのデータ型が用意されています。 provides data types such as nchar and nvarchar to store Unicode data. これらのデータ型は、 UTF-16と呼ばれる形式でテキストをエンコードします。These data types encode text in a format called UTF-16. Unicode コンソーシアムは、各文字に一意のコード ポイント (0x0000 から 0x10FFFF の範囲の値) を割り当てています。The Unicode Consortium allocates each character a unique codepoint, which is a value in the range 0x0000 to 0x10FFFF. 最もよく使用される一連の文字にはメモリとディスク上で 16 ビット ワードに収まるコード ポイント値がありますが、コード ポイント値が 0xFFFF を超える文字は、連続した 2 つの 16 ビット ワードを必要とします。The most frequently used characters have codepoint values that fit into a 16-bit word in memory and on disk, but characters with codepoint values larger than 0xFFFF require two consecutive 16-bit words. これらの文字は 補助文字と呼ばれ、2 つの連続する 16 ビット ワードは サロゲート ペアと呼ばれます。These characters are called supplementary characters, and the two consecutive 16-bit words are called surrogate pairs.

SQL Server 2012 (11.x)SQL Server 2012 (11.x) 以降では、新しい補助文字 (_SC) の照合順序が、ncharnvarchar、および sql_variant の各データ型で使用できます。Introduced in SQL Server 2012 (11.x)SQL Server 2012 (11.x), a new family of supplementary character (_SC) collations can be used with the data types nchar, nvarchar, and sql_variant. たとえば、 Latin1_General_100_CI_AS_SCや、日本語の照合順序を使用する場合は Japanese_Bushu_Kakusu_100_CI_AS_SCを使用できます。For example: Latin1_General_100_CI_AS_SC, or if using a Japanese collation, Japanese_Bushu_Kakusu_100_CI_AS_SC.

SQL Server 2014 (12.x)SQL Server 2014 (12.x) 以降では、すべての新しい照合順序が補助文字を自動的にサポートします。Starting in SQL Server 2014 (12.x)SQL Server 2014 (12.x), all new collations automatically support supplementary characters.

補助文字を使用する場合は、以下の点に注意してください。If you use supplementary characters:

  • 補助文字は、90 以上の照合順序バージョンで、並べ替えと比較の操作に使用できます。Supplementary characters can be used in ordering and comparison operations in collation versions 90 or greater.

  • すべてのバージョン 100 の照合順序で、補助文字の言語的な並べ替えがサポートされています。All version 100 collations support linguistic sorting with supplementary characters.

  • 補助文字は、データベース オブジェクトの名前など、メタデータ内で使用することはできません。Supplementary characters are not supported for use in metadata, such as in names of database objects.

  • 補助文字 (_SC) を含む照合順序を使用しているデータベースでは、 SQL ServerSQL Server レプリケーションを有効にすることはできません。Databases that use collations with supplementary characters (_SC), cannot be enabled for SQL ServerSQL Server Replication. これは、レプリケーション用に作成されるシステム テーブルとストアド プロシージャの一部が、補助文字をサポートしていないレガシ ntext データ型を使用しているからです。This is because some of the system tables and stored procedures that are created for replication, use the legacy ntext data type, which does not support supplementary characters.

  • SC フラグは、以下に適用できます。The SC flag can be applied to:

    • バージョン 90 照合順序Version 90 collations

    • バージョン 100 照合順序Version 100 collations

  • SC フラグは、以下には適用できません。The SC flag cannot be applied to:

    • バージョン 80 バージョンなしの Windows 照合順序Version 80 non-versioned Windows collations

    • BIN または BIN2 バイナリ照合順序The BIN or BIN2 binary collations

    • SQL* 照合順序The SQL* collations

    • バージョン 140 照合順序 (これらは、補助文字を既にサポートしているので、SC フラグを必要としません)Version 140 collations (these don't need the SC flag as they already support supplementary characters)

    次の表では、一部の文字列関数と文字列演算子で、補助文字が SC 照合順序ありで使用される場合と、補助文字対応 (SCA) 照合順序なしで使用される場合の動作を比較しています。The following table compares the behavior of some string functions and string operators when they use supplementary characters with and without a supplementary character-aware (SCA) collation:

文字列関数または演算子String Function or Operator 補助文字対応 (SCA) 照合順序ありWith a Supplementary Character-Aware (SCA) Collation SCA 照合順序なしWithout an SCA Collation
CHARINDEXCHARINDEX

LENLEN

PATINDEXPATINDEX
UTF-16 サロゲート ペアは、1 つのコード ポイントとしてカウントされます。The UTF-16 surrogate pair is counted as a single codepoint. UTF-16 サロゲート ペアは、2 つのコード ポイントとしてカウントされます。The UTF-16 surrogate pair is counted as two codepoints.
LEFTLEFT

REPLACEREPLACE

REVERSEREVERSE

RIGHTRIGHT

SUBSTRINGSUBSTRING

STUFFSTUFF
これらの関数は、各サロゲート ペアを 1 つのコード ポイントとして処理し、期待どおりに動作します。These functions treat each surrogate pair as a single codepoint and work as expected. これらの関数では、サロゲート ペアが分割され、予期しない結果が生じることがあります。These functions may split any surrogate pairs and lead to unexpected results.
NCHARNCHAR 0 ~ 0x10FFFF の範囲の指定した Unicode コード ポイント値に対応する文字を返します。Returns the character corresponding to the specified Unicode codepoint value in the range 0 to 0x10FFFF. 指定された値が 0 ~ 0xFFFF の範囲内にある場合、1 つの文字だけが返されます。If the value specified lies in the range 0 through 0xFFFF, one character is returned. 値が大きい場合、対応するサロゲート ペアが返されます。For higher values, the corresponding surrogate is returned. 0 xFFFF よりも高い値の場合は、対応するサロゲートの代わりに NULL が返されます。A value higher than 0xFFFF returns NULL instead of the corresponding surrogate.
UNICODEUNICODE 0 から 0x10FFFF の範囲の UTF-16 コード ポイントが返されます。Returns a UTF-16 codepoint in the range 0 through 0x10FFFF. 0 から 0xFFFF の範囲の UCS-2 コード ポイントが返されます。Returns a UCS-2 codepoint in the range 0 through 0xFFFF.
1 文字に一致するワイルドカードMatch One Character Wildcard

ワイルドカード - 一致しない文字列Wildcard - Character(s) Not to Match
補助文字は、すべてのワイルドカード操作でサポートされています。Supplementary characters are supported for all wildcard operations. 補助文字は、これらのワイルドカード操作でサポートされていません。Supplementary characters are not supported for these wildcard operations. その他のワイルドカード演算子がサポートされます。Other wildcard operators are supported.

GB18030 のサポートGB18030 Support

GB18030 は中華人民共和国が単独で中国語の文字のエンコードに使用している標準規格です。GB18030 is a separate standard used in the People's Republic of China for encoding Chinese characters. GB18030 文字の長さは 1 バイト、2 バイト、4 バイトのいずれかです。In GB18030, characters can be 1, 2, or 4 bytes in length. SQL ServerSQL Server では、クライアント側アプリケーションからサーバーに GB18030 でエンコードした文字が入力されたときに文字を認識し、内部的には Unicode 文字に変換して格納することで GB18030 文字をサポートしています。 provides support for GB18030-encoded characters by recognizing them when they enter the server from a client-side application and converting and storing them natively as Unicode characters. サーバーに格納された GB18030 文字は、それ以降の操作では Unicode 文字として処理されます。After they are stored in the server, they are treated as Unicode characters in any subsequent operations. 任意の中国語の照合順序を使用できますが、最新の 100 バージョンの使用をお勧めします。You can use any Chinese collation, preferably the latest 100 version. すべての _100 レベルの照合順序は、GB18030 文字の言語的な並べ替えをサポートしています。All _100 level collations support linguistic sorting with GB18030 characters. データに補助文字 (サロゲート ペア) が含まれている場合は、検索や並べ替えの機能を向上させるために、 SQL Server 2017SQL Server 2017 で利用可能な SC 照合順序を使用できます。If the data includes supplementary characters (surrogate pairs), you can use the SC collations available in SQL Server 2017SQL Server 2017 to improve searching and sorting.

複雑な文字表記のサポートComplex Script Support

SQL ServerSQL Server は、複雑な文字表記の入力、格納、変更、および表示をサポートできます。 can support inputting, storing, changing, and displaying complex scripts. 複雑な文字表記には、次の種類があります。Complex scripts include the following types:

  • アラビア語テキストと英語テキストの組み合わせなど、右から左に記述されるテキストと左から右に記述されるテキストの両方の組み合わせを含む文字表記。Scripts that include the combination of both right-to-left and left-to-right text, such as a combination of Arabic and English text.
  • アラビア語、インド諸語、タイ語の文字など、位置によって、または別の種類の文字と組み合わせた場合に、文字が変形する文字表記。Scripts whose characters change shape depending on their position, or when combined with other characters, such as Arabic, Indic, and Thai characters.
  • タイ語など、単語間に区切りがないため、単語を識別するための内部辞書を必要とする言語。Languages such as Thai that require internal dictionaries to recognize words because there are no breaks between them.

SQL ServerSQL Server を操作するデータベース アプリケーションは、複雑な文字表記をサポートするコントロールを使用する必要があります。Database applications that interact with SQL ServerSQL Server must use controls that support complex scripts. マネージ コードで作成される標準の Windows フォーム コントロールは、複雑な文字表記を使用できます。Standard Windows form controls that are created in managed code are complex script-enabled.

SQL Server 2017 (14.x)SQL Server 2017 (14.x) に追加された日本語照合順序Japanese Collations added in SQL Server 2017 (14.x)SQL Server 2017 (14.x)

SQL Server 2017 (14.x)SQL Server 2017 (14.x) 以降では、各種オプションの順列 (_CS、_AS、_KS、_WS、_SS など) で、2 つの新しい日本語照合順序がサポートされています。Starting in SQL Server 2017 (14.x)SQL Server 2017 (14.x), two new Japanese collation families are supported, with the permutations of various options (_CS, _AS, _KS, _WS, _VSS).

これらの照合順序を一覧表示するには、SQL Server データベース エンジンに対してクエリを実行します。To list these collations, you can query the SQL Server Database Engine:

SELECT Name, Description FROM fn_helpcollations()  
WHERE Name LIKE 'Japanese_Bushu_Kakusu_140%' OR Name LIKE 'Japanese_XJIS_140%'

すべての新しい照合順序には補助文字の組み込みサポートがあるので、どの新しい照合順序にも SC フラグはありません (または必要ありません)。All of the new collations have built-in support for supplementary characters, so none of the new collations have (or need) the SC flag.

これらの照合順序はデータベース エンジン インデックス、メモリ最適化テーブル、列ストア インデックス、ネイティブ コンパイル モジュールでサポートされています。These collations are supported in Database Engine indexes, memory-optimized tables, columnstore indexes, and natively compiled modules.

タスクTask トピックTopic
SQL Server のインスタンスの照合順序を設定または変更する方法について説明します。Describes how to set or change the collation of the instance of SQL Server. サーバーの照合順序の設定または変更Set or Change the Server Collation
ユーザー データベースの照合順序を設定または変更する方法について説明します。Describes how to set or change the collation of a user database. データベースの照合順序の設定または変更Set or Change the Database Collation
データベース内の列の照合順序を設定または変更する方法について説明します。Describes how to set or change the collation of a column in the database. 列の照合順序の設定または変更Set or Change the Column Collation
サーバー、データベース、または列のレベルでの照合順序の情報を取得する方法について説明します。Describes how to return collation information at the server, database, or column level. 照合順序情報の表示View Collation Information
Transact-SQL ステートメントを、ある言語から別の言語に容易に移行したり、複数の言語を簡単にサポートしたりできるように記述する方法について説明します。Describes how to write Transact-SQL statements that are more portable from one language to another, or support multiple languages more easily. 国際化に対応した Transact-SQL ステートメントの記述Write International Transact-SQL Statements
エラー メッセージの言語と、日付、時刻、通貨データを使用および表示する際の設定を変更する方法について説明します。Describes how to change the language of error messages and preferences for how date, time, and currency data are used and displayed. セッション言語の設定Set a Session Language

SQL Server ベスト プラクティス照合順序の変更SQL Server Best Practices Collation Change

SQL Server ベスト プラクティス Unicode への移行"SQL Server Best Practices Migration to Unicode"

Unicode コンソーシアムの Web サイトUnicode Consortium Web site

参照See Also

包含データベースの照合順序 Contained Database Collations
フルテキスト インデックス作成時の言語の選択 Choose a Language When Creating a Full-Text Index
sys.fn_helpcollations (Transact-SQL)sys.fn_helpcollations (Transact-SQL)