设置或更改服务器排序规则

适用于:SQL ServerAzure SQL 托管实例

服务器排序规则用作与 SQL Server的实例一起安装的所有系统数据库以及任何新创建的用户数据库的默认排序规则。

应仔细考虑服务器级别的排序规则,因为这可能会影响:

  • =JOINORDER BY 和其他比较文本数据的运算符的排序和比较规则。
  • 系统视图、系统函数和 tempdb 中的对象(例如临时表)中 CHARVARCHARNCHARNVARCHAR 列的排序规则。
  • 变量、游标和 GOTO 标签的名称。 例如,假设服务器级排序规则区分大小写,则变量 @pi@PI 将被视为不同的变量;假设服务器级排序规则不区分大小写,则这两个变量将被视为同一变量。

SQL Server 中的服务器排序规则

服务器排序规则是在 SQL Server 安装期间指定的。 默认服务器级排序规则基于操作系统的区域设置。

例如,使用美国英语 (en-US) 的系统的默认排序规则是 SQL_Latin1_General_CP1_CI_AS。 有关详细信息(包括 OS 区域设置到默认排序规则映射的列表),请参阅排序规则和 Unicode 支持的“服务器级排序规则”部分。

注意

SQL Server Express LocalDB 的服务器级排序规则为 SQL_Latin1_General_CP1_CI_AS,并且不能在安装期间或之后更改。

更改 SQL Server 中的服务器排序规则

更改 SQL Server 实例的默认排序规则的操作可能很复杂。

注意

可以通过 CREATE DATABASEALTER DATABASE 语句的 COLLATE 子句,为创建的每个新数据库指定默认排序规则,而不更改 SQL Server实例的默认排序规则。 有关详细信息,请参阅 Set or Change the Database Collation

更改实例排序规则涉及到以下步骤:

  • 确保具有重新创建用户数据库及这些数据库中的所有对象所需的全部信息或脚本。

  • 使用工具(例如 bcp Utility)导出所有数据。 有关详细信息,请参阅批量导入和导出数据 (SQL Server)

  • 删除所有用户数据库。

  • 重新生成在 setup 命令的 SQLCOLLATION 属性中指定新的排序规则的 master 数据库。 例如:

    Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName
    /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ]
    /SQLCOLLATION=CollationName  
    

    有关详细信息,请参阅 重新生成系统数据库

  • 创建所有数据库及这些数据库中的所有对象。

  • 导入所有数据。

设置 Azure SQL 托管实例中的服务器排序规则

可以在创建实例时指定 Azure SQL 托管实例中的服务器级别排序规则,以后不能更改。 创建实例时,可通过 Azure 门户PowerShell 和资源管理器模板设置服务器级别排序规则。 默认服务器级排序规则为 SQL_Latin1_General_CP1_CI_AS。

如果要将数据库从 SQL Server 迁移到 Azure SQL 托管实例,请使用 SERVERPROPERTY(N'Collation') 函数检查源 SQL Server 中的服务器排序规则,并创建与 SQL Server 排序规则匹配的托管实例。 使用不匹配的服务器级排序规则将数据库从 SQL Server 迁移到 SQL 托管实例可能会导致查询中出现多个意外错误。 不能更改现有托管实例的服务器级别排序规则。

Azure SQL 数据库中的排序规则

不能更改或设置 Azure SQL 数据库的逻辑服务器排序规则,但可以配置每个数据库的数据和目录排序规则。 目录排序规则确定系统元数据(如对象标识符)的排序规则。 在 Azure 门户中创建数据库、使用 CREATE DATABASE 在 T-SQL 中创建数据库以及使用 New-AzSqlDatabase 在 PowerShell 中创建数据库时,可以单独指定这两种排序规则。