データベースの照合順序の設定または変更

適用対象: SQL ServerAzure SQL Managed Instance

この記事では、SQL Server Management Studio (SSMS) または Transact-SQL を使用してデータベースの照合順序を設定または変更する方法について説明します。 照合順序を指定しない場合、サーバーの照合順序が使用されます。

制限事項と制約事項

  • Windows Unicode 専用の照合順序は、COLLATE 句で、列レベルと式レベルのデータの ncharnvarcharntext の各データ型に対して照合順序を適用する場合にのみ使用できます。 データベースまたはサーバー インスタンスの照合順序を変更するために、COLLATE 句で使用することはできません。

  • 指定した照合順序、または参照先のオブジェクトで使用される照合順序で、Windows でサポートされていないコード ページが使用されていると、データベース エンジンでエラーが表示されます。

  • Azure SQL Managed Instance のサーバーレベルの照合順序は、インスタンスの作成時に指定できますが、後で変更することはできません。 詳細については、「サーバーの照合順序の設定または変更」を参照してください。

重要

Azure SQL Database では ALTER DATABASE COLLATE ステートメントはサポートされていません。 CREATE DATABASE の時点でデータベース照合順序とカタログ照合順序を指定します。

推奨事項

サポートされる照合順序名は、「Windows 照合順序名 (Transact-SQL)」と「SQL Server 照合順序名 (Transact-SQL)」で確認できます。または、sys.fn_helpcollations (Transact-SQL) システム関数を使用できます。

データベースの照合順序を変更すると、次の変更が行われます。

  • システム テーブル内の char型、 varchar型、 text型、 nchar型、 nvarchar型、または ntext 型の列はすべて、新しい照合順序に変更されます。

  • ストアド プロシージャおよびユーザー定義関数で使用されている charvarchartextncharnvarchar、または ntext の既存のパラメーターおよびスカラー値の戻り値はすべて、新しい照合順序に変更されます。

  • charvarchartextncharnvarchar、または ntext のシステム データ型およびこれらを基にしたユーザー定義データ型はすべて、新しい既定の照合順序に変更されます。

ユーザー データベースに作成される新しいオブジェクトの照合順序は、ALTER DATABASE ステートメントの COLLATE 句を使用して変更できます。 このステートメントを実行しても、既存のユーザー定義テーブルの列の照合順序は変更されませんALTER TABLECOLLATE 句で変更することができます。

重要

データベースまたは個々の列の照合順序を変更しても、既存のテーブルに既に格納されている基になるデータは変更されません。 アプリケーションが異なる照合順序間でデータの変換と比較を明示的に処理する場合を除き、データベース内の既存のデータを新しい照合順序に移行することをお勧めします。 これにより、アプリケーションによってデータが誤って変更され、正しくない結果が発生したり知らない間にデータが失われたりするリスクが排除されます。

データベースの照合順序を変更すると、新しいテーブルだけが既定で新しいデータベースの照合順序を継承します。 既存のデータを新しい照合順序に変換するには、いくつかの選択肢があります。

  • 適切な場所でデータを変換する。 既存のテーブル内の列の照合順序を変換する方法については、「列の照合順序の設定または変更」を参照してください。 この操作は簡単に実装できますが、大きなテーブルやビジー状態のアプリケーションで障害となっている問題になる可能性があります。 MyString 列から新しい照合順序へのインプレース変換については、次の例を参照してください。

    ALTER TABLE dbo.MyTable
        ALTER COLUMN MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8;
    
  • 新しい照合順序を使用する新しいテーブルにデータをコピーし、同じデータベース内の元のテーブルを置換します。 現在のデータベースに、データベースの照合順序を継承する新しいテーブルを作成し、古いテーブルと新しいテーブルの間でデータをコピーしたら、元のテーブルを削除して、新しいテーブルの名前を元のテーブルの名前に変更します。 これは、インプレース変換の操作よりも高速ですが、外部キー制約、主キー制約、トリガーなどの依存関係を含む複雑なスキーマを処理する場合には困難となる場合があります。 また、データが引き続きアプリケーションによって変更される場合は、最終的なカットオフの前に、元のものと新しいテーブルの間で最終的なデータ同期も必要になります。 MyString 列から新しい照合順序への "コピーと変換" による変換については、次の例を参照してください。

    CREATE TABLE dbo.MyTable2 (MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8); 
    
    INSERT INTO dbo.MyTable2 
    SELECT * FROM dbo.MyTable; 
    
    DROP TABLE dbo.MyTable; 
    
    EXEC sp_rename 'dbo.MyTable2', 'dbo.MyTable';
    
  • 新しい照合順序を使用する新しいデータベースにデータをコピーし、元のデータベースを置き換えます。 新しい照合順序を使用して新しいデータベースを作成し、Integration Services や SQL Server Management Studio のインポート/エクスポート ウィザードのようなツールを使用して、元のデータベースのデータを転送します。 これは、複雑なスキーマのためのより簡単な方法です。 また、データが引き続きアプリケーションによって変更される場合は、最終的なカットオフの前に、元のものと新しいデータベースの間で最終的なデータ同期も必要になります。

アクセス許可

新しいデータベースを作成するには、データベースのアクセス許可がmaster必要CREATE DATABASEです。または、、または ALTER ANY DATABASE アクセス許可が必要CREATE ANY DATABASEです。

既存のデータベースの照合順序を変更するには、データベースに対する ALTER アクセス許可が必要です。

SSMS を使用してデータベースの照合順序を設定または変更する

  1. オブジェクト エクスプローラーで、 SQL Server データベース エンジンのインスタンスに接続して、そのインスタンスを展開します。次に、 [データベース] を展開します。

  2. 新しいデータベースを作成する場合は、 [データベース] を右クリックし、 [新しいデータベース] を選択します。 既定の照合順序を使用しない場合は、[オプション] ページを選択し、[照合順序] ドロップダウンの一覧から照合順序を選択します。

    データベースが既に存在する場合は、使用するデータベースを右クリックし、 [プロパティ] を選択します。 [オプション] ページを選択し、 [照合順序] ボックスの一覧から照合順序を選択します。

  3. 操作が完了したら、 [OK] をクリックします。

Transact-SQL を使用してデータベース照合順序を設定する

  1. データベース エンジンに接続します。

  2. 標準バーから、 [新しいクエリ] を選択します。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。 この例は、CREATE DATABASECOLLATE 句を使用して照合順序名を指定する方法を示しています。 この例は、 MyOptionsTest 照合順序を使用する Latin1_General_100_CS_AS_SC を作成します。 データベースを作成したら、 SELECT ステートメントを実行して設定を検証します。

USE master;  
GO

IF DB_ID (N'MyOptionsTest') IS NOT NULL  
    DROP DATABASE MyOptionsTest;  
GO

CREATE DATABASE MyOptionsTest  
    COLLATE Latin1_General_100_CS_AS_SC;  
GO  
  
SELECT name, collation_name  
FROM sys.databases  
WHERE name = N'MyOptionsTest';  
GO  

Transact-SQL を使用してデータベース照合順序を変更する

  1. データベース エンジンに接続します。

  2. 標準バーから、 [新しいクエリ] を選択します。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。 この例は、ALTER DATABASE ステートメントで COLLATE 句を使用して照合順序名を変更する方法を示しています。 SELECT ステートメントを実行して変更を確認します。

USE master;  
GO

ALTER DATABASE MyOptionsTest  
    COLLATE French_CI_AS ;  
GO  
  
SELECT name, collation_name  
FROM sys.databases  
WHERE name = N'MyOptionsTest';  
GO  

次のステップ

詳しくは、照合順序に関する記事をご覧ください。