Windows 排序规则排序样式

SQL Server 安装过程中将提示选择 Windows 排序规则或二进制排序规则。此选择将影响 MicrosoftSQL Server 实例的数据比较和排序顺序行为。本主题提供为您的 SQL Server 实现选择 Microsoft Windows 排序规则或二进制排序规则时的注意事项。

注意注意

对于 Windows 排序规则,nchar、nvarchar 和 ntext 这些 Unicode 数据类型与 char、varchar 和 text 这些非 Unicode 数据类型的排序行为相同。

Windows 排序规则根据关联的 Windows 区域设置来定义字符数据的存储规则。Windows 基本排序规则指定应用字典排序时所用的字母表或语言,以及用于存储非 Unicode 字符数据的代码页。二进制排序规则基于区域设置和数据类型所定义的编码值的顺序,对数据进行排序。SQL Server 中的二进制排序规则强制使用二进制排序顺序,定义了要使用的区域设置和 ANSI 代码页。由于二进制排序规则相对简单,因此对改进应用程序的性能非常有用。对于非 Unicode 数据类型,数据比较将基于 ANSI 代码页中定义的码位。对于 Unicode 数据类型,数据比较将基于 Unicode 码位。对于 Unicode 数据类型的二进制排序规则,数据排序将不考虑区域设置。例如,对 Unicode 数据应用 Latin_1_General_BIN 和 Japanese_BIN,会得到完全相同的排序结果。

SQL Server 中早期的二进制排序规则对 Unicode 数据执行的是不完整的逐码位比较,因为更早的 SQL Server 二进制排序规则将首字符作为 WCHAR 比较,然后才进行逐字节比较。为了实现向后兼容,将不更改现有的二进制排序规则语义。

此版本的 SQL Server 中的二进制排序规则还包含一组纯码位比较排序规则。客户可以选择迁移到二进制排序规则,以利用真正的码位比较,并且应该使用二进制排序规则来开发新的应用程序。BIN2 后缀标识了实现码位排序规则语义的排序规则名称。另外,新的二进制排序还有一个与 BIN2 对应的比较标志。有关详细信息,请参阅BIN 和 BIN2 排序规则的使用准则

下表说明 SQL Server 的 Windows 排序规则排序顺序选项。

排序顺序(后缀)

排序顺序说明

二进制 (_BIN)1

根据为每个字符定义的位模式对 SQL Server 表中的数据进行排序和比较。二进制排序顺序既区分大小写,也区分重音。二进制排序顺序的速度也最快。有关详细信息,请参阅BIN 和 BIN2 排序规则的使用准则

如果未选择此选项,则 SQL Server 将遵循字典中定义的相关语言或字母表的排序和比较规则。

二进制-码位 (_BIN2)1

根据 Unicode 数据的 Unicode 码位对 SQL Server 表中的数据进行排序和比较。对于非 Unicode 数据,二进制-码位将使用与二进制排序相同的比较方式。

使用二进制-码位排序顺序的优点是:对已排序的 SQL Server 数据进行比较的应用程序不必重新对数据进行排序。因此,二进制-码位排序顺序使应用程序开发变得更加简单,从而可以提高性能。有关详细信息,请参阅BIN 和 BIN2 排序规则的使用准则

区分大小写 (_CS)

区分大写字母和小写字母。如果选择此项,排序时小写字母将在其对应的大写字母之前。

如果未选择此选项,则 SQL Server 认为字母的大小写形式对于排序目的而言是相同的。

区分重音 (_AS)

区分重音字符和非重音字符。例如,“a”和“ấ”视为不同字符。

如果未选择此项,在排序时,SQL Server 将把字母的重音形式和非重音形式视为相同。

区分假名 (_KS)

区分日语中的两种假名字符类型:平假名和片假名。

如果未选择此选项,则 SQL Server 认为片假名字符和平假名字符对于排序目的而言是相等的。

区分全半角 (_WS)

区分字符的单字节形式和双字节形式。

如果未选择此项,在排序时,SQL Server 将把同一字符的单字节形式和双字节形式视为相同。

1如果选择此选项,则区分大小写、区分重音、区分假名和区分全半角选项均不可用。

Windows 排序规则示例

每个 Windows 排序规则都由一系列定义大小写、重音、全半角或假名的后缀组合而成。下列示例说明各种后缀组合的排序顺序行为。

Windows 排序规则后缀

排序顺序说明

_BIN1

二进制排序。

_BIN21

二进制-码位排序顺序。

_CI_AI

不区分大小写、不区分重音、不区分假名、不区分全半角。

_CI_AI_KS

不区分大小写、不区分重音、区分假名、不区分全半角

_CI_AI_KS_WS

不区分大小写、不区分重音、区分假名、区分全半角

_CI_AI_WS

不区分大小写、不区分重音、不区分假名、区分全半角

_CI_AS

不区分大小写、区分重音、不区分假名、不区分全半角

_CI_AS_KS

不区分大小写、区分重音、区分假名、不区分全半角

_CI_AS_KS_WS

不区分大小写、区分重音、区分假名、区分全半角

_CI_AS_WS

不区分大小写、区分重音、不区分假名、区分全半角

_CS_AI

区分大小写、不区分重音、不区分假名、不区分全半角

_CS_AI_KS

区分大小写、不区分重音、区分假名、不区分全半角

_CS_AI_KS_WS

区分大小写、不区分重音、区分假名、区分全半角

_CS_AI_WS

区分大小写、不区分重音、不区分假名、区分全半角

_CS_AS

区分大小写、区分重音、不区分假名、不区分全半角

_CS_AS_KS

区分大小写、区分重音、区分假名、不区分全半角

_CS_AS_KS_WS

区分大小写、区分重音、区分假名、区分全半角

_CS_AS_WS

区分大小写、区分重音、不区分假名、区分全半角

1如果选择 BIN 或二进制-码位,则区分大小写、区分重音、区分假名和区分全半角选项均不可用。