次の方法で共有


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

適用対象:SQL ServerAzure 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 のシステム データ型およびこれらを基にしたユーザー定義データ型はすべて、新しい既定の照合順序に変更されます。

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

アクセス許可

新しいデータベースを作成する場合は、CREATE DATABASE データベースでの master アクセス許可か、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 の時点でデータベースの照合順序とカタログの照合順序を指定します。