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

適用対象: SQL Server Azure SQL Managed Instance

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

データベースの照合順序を指定しない場合、サーバーの照合順序が使用されます。

推奨事項

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

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

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

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

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

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

アクセス許可

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

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

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

SQL Server Management Studio (SSMS) または Transact-SQL (T-SQL) を使用してデータベースの照合順序を設定または変更できます。

SQL Server Management Studio (SSMS) を使用して、新しいデータベースの照合順序を指定したり、既存のデータベースの照合順序を更新できます。

SQL Server Management Studio でオブジェクト エクスプローラーを開き、SQL Server データベース エンジンのインスタンスに接続し、インスタンスを拡張した後、[データベース] を展開します。

  • 新しいデータベースの場合: [データベース] を右クリックし、[新しいデータベース] を選択します。 デフォルトの照合順序を使用しない場合は、[オプション] ページを選択し、[照合順序] ドロップダウン リストから照合順序を選択します。
  • 既存のデータベースの場合: 目的のデータベースを右クリックし、[プロパティ] を選択します。 [オプション] ページを選択し、[照合順序] ドロップダウン リストから照合順序を選択します。

照合順序を変更した後のデータ

重要

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

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

  • 適切な場所でデータを変換する。 既存のテーブル内の列の照合順序を変換する方法については、「列の照合順序の設定または変更」を参照してください。 この操作は簡単に実装できますが、大きなテーブルやビジー状態のアプリケーションで障害となっている問題になる可能性があります。 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';
    
  • 新しい照合順序を使用する新しいデータベースにデータをコピーし、元のデータベースを置き換えます。 新しい照合順序を使用して新しいデータベースを作成し、統合サービス や SQL Server Management Studio のインポート/エクスポート ウィザードのようなツールを使用して、元のデータベースのデータを転送します。 これは、複雑なスキーマのためのより簡単な方法です。 また、データが引き続きアプリケーションによって変更される場合は、最終的なカットオフの前に、元のものと新しいデータベースの間で最終的なデータ同期も必要になります。

制限事項

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

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

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

重要

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