日期:2014-03-28 浏览次数:20569 次
每个人都把排序的数据当作理所当然的东西;毕竟,有什么比字母表更基本呢? 我们当中的一些人可能会想到使用不同字母集的语言,如希腊语、俄语、泰语或日语。但至少在美国,每个人似乎都认为他们唯一需要考虑的就是字母表。
问题是他们都错了! 无论您是否想了解懂西班牙语的用户为什么希望将字母组合“ch”放在字母“h”之后作为单个字符进行排序,您都必须知道非英语语言具有不同的排序规则。通常,最有效的疏远应用程序最终用户的方法之一就是把基本排序这样的任务弄错。
要解决问题,可以利用排序规则(或排序顺序)和称作字符串标准化的技术。这里的“标准化”不同于数据库开发人员过去所习惯的标准化概念,因为它不是一个设计问题;当您提到字符串标准化时,实际是在考虑如何比较两个字符串使它们可以排序。这可以通过创建索引来进行优化。
对于非 Unicode 列,排序规则具有另一种非常重要的含义:排序规则指定了数据的代码页,因而指定了可以显示哪些字符。数据可以在各 Unicode 列间毫无阻碍地移动,但数据却无法在非 Unicode 列中进行移动。
在 SQL Server 6.5 和早期版本中,通常还依赖排序规则来指定用于语言的代码页。这些版本中存在与不同排序顺序(例如在各种拉丁语中)相关的限制。另外,如果您使用的是 Latin-1,则只能支持西欧语言。因此,在 SQL Server 单个例程上的信息中可显示的不同区域设置数(即特定区域中使用的不同语言的数目)受到了限制。这种基本问题同样适用于 SQL Server 后期版本中非 Unicode 字段的排序规则。此外,具有“最适合的”代码页的语言(例如前面在非 Unicode 文本类型:char、varchar 和 text 中提及的波斯语)方面的问题在这里也适用。
在每台服务器上,SQL Server 7.0 都有一个 Unicode 排序规则和一个非 Unicode 排序规则。由于每个代码页可以支持多种排序,所以非 Unicode 排序规则是由代码页和排序顺序 ID 两方面的决策组成的。例如,拉丁语言通常会既允许区分大小写的排序也允许不区分大小写的排序,而简体中文既允许按笔画排序也允许按拼音排序。
在 Unicode 排序规则中,可以在列中包含任何语言的任何字符,所以在这里提供了各种可用的排序规则来确保任何特定于排序规则的差异都得到正确的处理。这是解决“最适合的”代码页问题的正确方法,因为如果使用一般的 Unicode 排序规则对波斯语数据进行排序,就可以为用户提供他们所需的数据。Unicode 排序规则由一个区域设置和多个比较样式组成。区域设置通常按国家或文化区域来命名。它们根据该区域中的标准对字符进行排序。Unicode 排序规则还为采用 Unicode 标准的所有字符提供了一种排序顺序,但指定的区域设置将具有优先权。
下表列出了 SQL Server 7.0 中所支持的唯一 Unicode 排序规则。未列出的任何区域设置应该使用“通用 Unicode 排序规则”。
区域设置 ID (LCID) | 说明 |
1033 | 通用 Unicode |
33280 | 二进制顺序 |
1027 | 加泰罗尼亚语 |
197636 | 中文汉语拼音字母(中国台湾地区) |
2052 | 中文标点符号 |
133124 | 中文笔画 |
1028 | 中文笔画(中国台湾地区) |
1050 | 克罗地亚语 |
1029 | 捷克语 |
1043 | 荷兰语 |
1061 | 爱沙尼亚语 |
1036 | 法语 |
66615 | 现代格鲁吉亚语 |
1031 | 德语 |
66567 | 德语电话簿 |
1038 | 匈牙利语 |
66574 | 匈牙利技术 |
1039 | 冰岛语 |
1040 | 意大利语 |
1041 | 日语 |
66577 |
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|