4

为什么所有 SQL Server 2008 R2 排序规则都与代码页相关联。所有排序规则都是 unicode 吗?

当我们的数据库被多种语言使用不同的代码页时,如何选择排序规则?

谢谢你。

4

1 回答 1

10

CHAR 与 NCHAR(即非 Unicode 与 Unicode)定义了字符存储编码。排序规则定义...排序规则(即排序顺序和比较规则)。它们是不同的概念,尽管经常混淆。

混淆源于客户端工具使用非 Unicode 数据的整理作为提示来选择数据的代码页这一事实。请参阅代码页架构。这意味着像 ADO.Net SqlClient 这样的客户端可以正确将从服务器接收到的单字节CHAR 数据编码为多字节 string.Net 对象。列元数据将包含使用的排序规则,因此客户端将知道如何根据特定代码页解释单字节数据。

对于 Unicode (NCHAR) 列,客户端不需要根据代码页解释数据,数据本身已经是多字节的,客户端将根据 UCS-2 编码(实际使用的 Unicode SQL 服务器)。

但是,不要将此与排序规则的实际含义混淆:比较字符的规则。如使用排序规则中所述:

说英语的人会期望字符串“Chiapas”按升序排列在“Colima”之前。但是,在墨西哥讲西班牙语的人可能希望以“Ch”开头的单词出现在以“C”开头的单词列表的末尾。排序规则规定了这些排序和比较规则。在 ORDER BY ASC 子句中,Latin_1 通用排序规则将“恰帕斯”排序在“科利马”之前,而传统_西班牙排序规则将“恰帕斯”排序在“科利马”之后。

此排序规则适用于任何数据类型(CHAR 非 Unicode 或 NCHAR Unicode)。

于 2013-03-21T12:23:07.447 回答