設定或變更資料庫定序

適用於:SQL ServerAzure SQL 受控執行個體

本文說明如何使用 SQL Server Management Studio (SSMS) 或 Transact-SQL 來設定或變更資料庫定序。

如果沒有指定資料庫定序,就會使用伺服器定序。

建議

您可以在 Windows 定序名稱和 SQL Server 定序名稱中找到支援的定序名稱;您也可以使用 sys.fn_helpcollations 系統函數。

當您變更資料庫定序時,會變更:

  • 系統資料表中的任何 char、 varchar、 text、 nchar、 nvarchar,或 ntext 資料行都會變更為新定序。

  • 預存程序與使用者定義函數的所有現有 char、 varchar、 text、 nchar、 nvarchar或 ntext 參數和純量傳回值,都會變更為新定序。

  • char、 varchar、 text、 nchar、 nvarchar或 ntext 系統資料類型,以及以這些系統資料類型為基礎的所有使用者定義資料類型,都會變更為新的預設定序。

你可以透過使用 COLLATE 該語句中的 ALTER DATABASE 子句,更改使用者資料庫中新建立物件的排序方式。 此陳述式不會變更現有使用者定義資料表中的資料行定序。 這些可以使用 COLLATE 的 ALTER TABLE 子句來變更。

權限

若要建立新資料庫,您需要 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';
    
  • 將資料複製到使用新定序的新資料庫,並取代原始資料庫。 使用新定序建立新的資料庫,然後透過 Integration Services 或 SQL Server Management Studio 中的 [匯入/匯出精靈] 等工具,從原始資料庫傳輸資料。 對於複雜的結構描述而言,這是較為簡單的方法。 若應用程式持續變更資料,則此作業在最後的截斷點前,還需要為原始資料庫與新資料庫之間的資料進行最後同步處理。

限制

  • Windows 僅限 Unicode 的定序只能與 COLLATE 子句 搭配使用,以便將定序套用至欄位層級和運算式層級資料中的 nchar、nvarchar 與 ntext 資料類型。 它們不能和 COLLATE 子句一起用來更改資料庫或伺服器實例的整合。

  • 如果指定的定序或所參考物件所用的定序使用 Windows 不支援的字碼頁,資料庫引擎就會顯示錯誤。

  • 建立 Azure SQL 受控執行個體時,可指定執行個體中的伺服器層級定序,且稍後無法變更。 若要深入了解,請參閱設定或變更伺服器定序。

重要

Azure SQL Database 不支援 ALTER DATABASE COLLATE 陳述式。 在 CREATE DATABASE 時指定資料庫定序和目錄定序。