Windows 排序规则排序样式
SQL Server 安装过程中将提示选择 Windows 排序规则或二进制排序规则。此选择将影响 Microsoft SQL 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 对应的新比较标志。有关详细信息,请参阅使用二进制排序规则。
下表说明 SQL Server 2005 的 Windows 排序规则排序顺序选项。
排序顺序(后缀) | 排序顺序说明 |
---|---|
二进制 (_BIN)1 |
根据为每个字符定义的位模式对 SQL Server 表中的数据进行排序和比较。二进制排序顺序既区分大小写,也区分重音。二进制排序顺序的速度也最快。有关详细信息,请参阅使用二进制排序规则。 如果未选择此选项,则 SQL Server 将遵循字典中定义的相关语言或字母表的排序和比较规则。 |
二进制-码位 (_BIN2)1 |
根据 Unicode 数据的 Unicode 码位对 SQL Server 表中的数据进行排序和比较。对于非 Unicode 数据,二进制-码位将使用与二进制排序相同的比较方式。 使用二进制-码位排序顺序的优点是:对已排序的 SQL Server 数据进行比较的应用程序不必重新对数据进行排序。因此,二进制-码位排序顺序使应用程序开发变得更加简单,从而可以提高性能。有关详细信息,请参阅使用二进制排序规则。 |
区分大小写 (_CS) |
区分大写字母和小写字母。如果选择此项,排序时小写字母将在其对应的大写字母之前。 如果未选择此选项,则 SQL Server 认为字母的大小写形式对于排序目的而言是相同的。 |
区分重音 (_AS) |
区分重音字符和非重音字符。例如,“a”和“?”将被视为不同的字符。 如果未选择此项,在排序时,SQL Server 将把字母的重音形式和非重音形式视为相同。 |
区分假名 (_KS) |
区分日语中的两种假名字符类型:平假名和片假名。 如果未选择此选项,则 SQL Server 认为片假名字符和平假名字符对于排序目的而言是相等的。 |
区分全半角 (_WS) |
区分字符的单字节形式和双字节形式。 如果未选择此项,在排序时,SQL Server 将把同一字符的单字节形式和双字节形式视为相同。 |
1如果选择此选项,则区分大小写、区分重音、区分假名和区分全半角选项均不可用。
Windows 排序规则示例
每个 Windows 排序规则都由一系列定义大小写、重音、全半角或假名的后缀组合而成。下列示例说明各种后缀组合的排序顺序行为。
Windows 排序规则后缀 | 排序顺序说明 |
---|---|
_BIN1 |
二进制排序。 |
_BIN21 |
二进制-码位排序顺序(SQL Server 2005 的新增功能)。 |
_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 或二进制-码位,则区分大小写、区分重音、区分假名和区分全半角选项均不可用。