服务器排序规则用作与 SQL Server的实例一起安装的所有系统数据库以及任何新创建的用户数据库的默认排序规则。
你应仔细考虑服务器级排序规则,因为它可能会影响:
-
=、JOIN、ORDER BY和其他比较文本数据的运算符的排序和比较规则。 - 系统视图、系统函数和
tempdb中的对象(例如临时表)中CHAR、VARCHAR、NCHAR和NVARCHAR列的排序规则。 - 变量、游标和
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 实例的默认排序规则的操作可能很复杂。
注意
可以通过 COLLATE 和 CREATE DATABASE 语句的 ALTER DATABASE 子句,为创建的每个新数据库指定默认排序规则,而不更改 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 门户中创建数据库,还是在 T-SQL 中使用 CREATE DATABASE,或在 PowerShell 中使用 New-AzSqlDatabase,都可以单独指定这两种排序规则。