排序规则术语

若要充分利用 SQL Server 2005 的语言支持,应了解本主题中所定义的术语。

术语

  • 代码页
  • 排序规则
  • 数据类型
  • 全球化
  • 区域设置
  • 读取顺序
  • 排序次序
  • Unicode

代码页

代码页是给定脚本的有序字符集,其中数值索引(即码位值)与每个字符相关联。通常将 Microsoft Windows 代码页称为“character set**”或“charset**”。代码页用于支持不同的 Windows 区域设置所使用的字符集和键盘布局。

相关主题:设置客户端代码页

返回页首

排序规则

排序规则指定表示数据集中每个字符的位模式。排序规则还决定用于数据排序和比较的规则。SQL Server 2005 支持在单个数据库中存储具有不同排序规则的对象,即 SQL Server 数据库中每列都可以有各自的排序规则。对于非 Unicode 列,排序规则设置指定数据的代码页,从而指定可以表示哪些字符。数据可以在 Unicode 列之间无缝地移动。在非 Unicode 列之间移动数据时,数据不能无缝地移动,而必须经当前代码页转换。

如果 Transact-SQL 语句运行于各自都具有不同排序规则设置的数据库的上下文中,则其运行结果可能会不同。如果可能,最佳实践应包括对组织使用标准化排序规则。如果已在组织中的所有系统上使用标准的排序规则设置,则无需在每个字符或 Unicode 表达式中显式地指定排序规则。如果必须使用具有不同排序规则和代码页设置的对象,则必须对查询进行编码以考虑排序规则优先级的规则。有关详细信息,请参阅排序规则的优先顺序 (Transact-SQL)

排序规则的特征是区分语言、区分大小写、区分重音、区分假名以及区分全半角。

SQL Server 2005 排序规则包括下列分组:

  • Windows 排序规则
    Windows 排序规则根据关联的 Windows 区域设置来定义字符数据的存储规则。在 Windows 排序规则中,使用与 Unicode 数据相同的算法实现非 Unicode 数据的比较。Windows 基本排序规则指定应用字典排序时所用的字母表或语言,以及用于存储非 Unicode 字符型数据的代码页。Unicode 排序和非 Unicode 排序都与特定 Windows 版本中的字符串比较相兼容。这可以保持 SQL Server 中不同数据类型间的一致性,也使开发人员能够使用与 SQL Server 所使用的相同的规则(即通过调用 Microsoft Win32 API 的 CompareStringW 函数)在应用程序中对字符串进行排序。有关详细信息,请参阅安装程序中的排序规则设置
  • 二进制排序规则
    二进制排序规则基于区域设置和数据类型所定义的编码值的顺序,对数据进行排序。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 排序规则
    SQL Server 排序规则提供与 SQL Server 早期版本兼容的排序顺序。SQL Server 排序规则基于由 SQL Server 为非 Unicode 数据(例如 charvarchar 数据类型)定义的早期 SQL Server 排序顺序。非 Unicode 数据的字典排序规则与 Windows 操作系统提供的任何排序例程都不兼容,但 Unicode 数据的排序与特定版本的 Windows 排序规则兼容。由于 SQL Server 排序规则对非 Unicode 数据和 Unicode 数据使用不同的比较规则,因此对于相同数据的比较可能看到不同的结果(取决于基本数据类型)。有关详细信息,请参阅使用 SQL 排序规则

    ms143726.note(zh-cn,SQL.90).gif注意:
    升级 SQL Server 的实例时可以指定 SQL Server 排序规则,以便与现有 SQL Server 实例兼容。由于 SQL Server 实例的默认排序规则是在安装过程中定义的,因此在以下情况下切记要慎重指定排序规则设置:
    • 应用程序代码在某些方面依赖早期 SQL Server 排序规则的行为。
    • 将在 SQL Server 6.5 或 SQL Server 7.0 的现有安装中使用 SQL Server 2005 复制。
    • 必须存储反映多种语言的字符数据。

SQL Server 2005 支持在 SQL Server 2005 实例的下列级别设置排序规则:

  • 服务器级排序规则
    SQL Server 实例的默认排序规则在安装过程中设置。实例的默认排序规则也会成为系统数据库(mastermodeltempdbmsdbdistribution)的默认排序规则。将排序规则指派给列或数据库以外的其他对象后,就无法再更改排序规则,除非删除并重新创建对象。可以在创建新的数据库或数据库列时指定排序规则,而不用更改 SQL Server 实例的默认排序规则。

    若要查询 SQL Server 实例的服务器排序规则,请使用下列 Transact-SQL SERVERPROPERTY 函数:

    SELECT CONVERT (varchar, SERVERPROPERTY('collation'))
    

    若要查询服务器以找到所有可用的排序规则,请使用以下 fn_helpcollations() 内置函数:

    SELECT * from ::fn_helpcollations()
    
  • 数据库级排序规则
    在创建数据库时,可以使用 CREATE DATABASE 语句的 COLLATE 子句指定数据库的默认排序规则。如果在数据库创建过程中未指定排序规则,则为数据库指派 model 数据库的默认排序规则。model 数据库的默认排序规则与 SQL Server 实例的默认排序规则相同。

    可用如下 ALTER DATABASE 语句更改用户数据库的排序规则:

    ALTER DATABASE myDB COLLATE Greek_CS_AI
    

    可以使用如下语句检索数据库的当前排序规则:

    SELECT CONVERT (varchar, DATABASEPROPERTYEX('database_name','collation'))
    
    ms143726.note(zh-cn,SQL.90).gif注意:
    更改数据库级排序规则不会影响用户级、表级或列级排序规则。
  • 列级排序规则
    创建表时,可以使用 CREATE TABLE 语句的 COLLATE 子句指定每个字符串列的排序规则。如果在表创建过程中未指定排序规则,则为列指派数据库的默认排序规则。

    可用如下 ALTER TABLE 语句更改列的排序规则:

    ALTER TABLE myTable ALTER COLUMN mycol NVARCHAR(10) COLLATE Greek_CS_AI
    
  • 表达式级排序规则
    表达式级排序规则在语句运行时设置,并且影响结果集的返回方式。这样便可以对结果进行排序,而使得 ORDER BY 子句可以是语言特定的。使用如下 COLLATE 子句可以实现表达式级排序规则:

    SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI
    

返回页首

数据类型

数据类型为一种定义,用于指定值的范围、可对值执行的操作以及值在计算机内存中的存储方式。对数据类型加以定义可使 SQL Server 以可预测的方式对数据进行操作。非 Unicode 字符数据类型为 charvarchartext。Unicode 数据类型使用 Unicode 字符表示形式;这些数据类型为 ncharnvarcharntext。建议在应用程序中使用 Unicode 数据类型,尤其是存储反映多种语言的字符数据时。

相关主题:数据类型(数据库引擎)数据类型 (Transact-SQL)Integration Services 数据类型

返回页首

全球化

全球化是指一种开发软件应用程序的过程,其特点为程序的功能和代码设计要兼顾多种语言和区域设置。全球化应用程序设计为数据输入、处理、显示和输出提供了多区域设置和支持 Unicode 的语言。

相关主题:SQL Server 的国际化注意事项

返回页首

区域设置

区域设置是一组与地点和区域性相关联的信息:语言的名称和标识符、用以书写语言的文字以及文化习俗。SQL Server 2005 支持由 Windows XP 所支持的全部 135 种区域设置。在这些区域设置中,包括五种中文区域设置(香港特别行政区、澳门特别行政区、中华人民共和国、新加坡和台湾)、十三种英语区域设置(澳大利亚、伯利兹、加拿大、加勒比、爱尔兰、牙买加、新西兰、菲律宾、南非、特立尼达、英国、美国和津巴布韦)和六种法语区域设置(比利时、加拿大、法国、卢森堡、摩纳哥和瑞士)。

下表说明 Windows 所支持的四种常用区域设置间的差异。

区域设置 英语(美国) 法语(法国) 日语 阿拉伯联合酋长国

国家/地区

美国

法国

日本

阿拉伯联合酋长国

语言

英语

法语

日语

阿拉伯语

文字书写

拉丁文

拉丁文

假名、日本汉字

阿拉伯语

读取顺序

从左到右

从左到右

从左到右

从右到左

Windows 定义的代码页

1252

1252

932

1256

时间格式

1:00 pm

13:00

13:00

1:00 p

日历

公历

公历

公历(本地化)

公历(本地化)

默认纸张大小

U.S. Letter

A4

A4

A4

小数分隔符

.

,

.

,

列表分隔符

,

;

,

;

千位分隔符

,

空格

,

,

返回页首

读取顺序

读取顺序为有序文本序列的首尾方向,它与单词的顺序有关,而与输入字符的顺序无关。例如,使用阿拉伯语作为键盘语言意味着新字符将始终从右向左出现。而拉丁语为键盘语言时,新字符将从左向右出现。

返回页首

排序次序

排序顺序指定数据值的排序方式,它影响数据比较的结果。数据的排序通过排序规则实现,且可以使用索引对其进行优化。

相关主题:Windows 排序规则排序样式索引

返回页首

Unicode

Unicode 使用两个而不是一个字节来表示语言的字符,这使得单个 Unicode 字符集可以表示世界上几乎所有书面语言。Unicode 由非营利性计算机行业组织 Unicode Consortium 开发,并且现在仍由该组织进行维护和升级。有关详细信息,请参阅 Unicode Consortium 网站

如果存储的字符数据反映多种语言,则应始终使用 Unicode 数据类型(ncharnvarcharntext),而不要使用非 Unicode 数据类型(charvarchartext)。使用 Unicode 可以体验到显著的性能提升,因为所需的代码页转换较少。非 Unicode 数据类型有明显的局限性,因为非 Unicode 计算机只能使用单个代码页。若要全面评估与使用 Unicode 或非 Unicode 数据类型相关的问题,必须测试您的具体方案以确定在特定环境下的性能差异大小。至少应对站点排序规则进行标准化,并尽可能部署 Unicode 服务器和客户端。

多数情况下,SQL Server 实例将与其他服务器或客户端进行交互,并且实例可以使用多种数据访问标准。SQL Server 客户端是两种主要类型之一:

  • 使用 OLE DB 和开放式数据库连接 (ODBC) 3.7 版或更高版本的 Unicode 客户端
  • 使用 DB-Library 和 ODBC 3.6 版或更低版本的非 Unicode 客户端

下表显示以 Unicode 和非 Unicode 服务器的各种组合使用多语言数据的注意事项。

服务器 客户端 优点或局限性

Unicode

Unicode

该方案是理想配置,因为 Unicode 数据将在整个系统中使用。该方案提供最佳性能,可以最大程度地防止检索数据的损坏。Microsoft ActiveX 数据对象 (ADO)、OLE DB 和 ODBC 3.7 版或更高版本都是这样的配置。

Unicode

非 Unicode

在此方案中,数据存储可能不是问题,但在向客户机移动数据时可能有限制。至少,必须使用非 Unicode 客户端上的代码页转换 Unicode 数据。

非 Unicode

Unicode

该方案对使用多语言数据不是理想配置。在此方案下不能向非 Unicode 服务器写入 Unicode 数据。向服务器发送代码页与服务器不同的数据时可能发生问题。

非 Unicode

非 Unicode

这是对多语言数据有极大局限性的方案。将只能使用单个代码页。理想配置是一台 Unicode 服务器配合多台 Unicode 客户端。

相关主题:Unicode 基础知识

返回页首

请参阅

参考

排序规则选项与国际支持

帮助和信息

获取 SQL Server 2005 帮助