Unicode 归类算法是用于对整个 Unicode 字符集进行排序的一种算法。它提供语言方面的正确比较、排序和大小写转换。UCA 是作为 Unicode 标准的一部分进行开发的。SQL Anywhere 使用 Unicode 的国际组件 (ICU) 开放源代码库(由 IBM 开发并维护)来实现 UCA。
采用缺省的 UCA 排序可按适当的顺序对大多数语言中的大多数字符进行排序。但是,由于在共享字符的各种语言之间,在排序和比较方面存在诸多变化,UCA 无法为所有语言提供正确的排序。为此,ICU 提供了用于定制 UCA 的语法。请参见归类定制选项。
UCA 以空间和时间上的小小代价提供了高级的比较、排序和大小写转换。
字符串的映射形式比原始字符串要长。通过该算法可对更加复杂的字符进行精密处理。
与 SQL Anywhere 归类算法不同,Unicode 归类算法仅用于单字节和 UTF-8 字符集,它将每个字符分成一个或多个属性。对于字母而言,这些属性为基本字符、重音和大小写。
非字母通常只有一个属性,基本字符。
UCA 按如下方式进行字符串比较:
比较基本字符。如果一个基本字符字符串与另一个不同,则比较完成。不考虑重音和大小写。
如果数据库区分重音,则比较重音。如果重音不同,则比较完成。不考虑大小写。
如果数据库区分大小写,则比较每个字符的大小写。
当且仅当两个字符串的基本字符、重音和大小写都相同时,原始字符串值才相等。
假定使用 UCA 比较下表第一列中的字符串。后续各列描述了每个字符串的三个属性。请注意,基本字符完全相同,单词仅在重音和大小写上不同。
字符串 | 基本字符 | 重音 | 大小写 |
---|---|---|---|
noel | noel | 无、无、无、无 | 小写、小写、小写、小写 |
noël | noel | 无、无、重音、无 | 小写、小写、小写、小写 |
Noel | noel | 无、无、无、无 | 大写、小写、小写、小写 |
Noël | noel | 无、无、重音、无 | 大写、小写、小写、小写 |
下表显示了使用 UCA 时在四种可能的区分重音和区分大小写的组合中将会进行的排序:
区分重音 | 区分大小写 | ORDER BY 结果 | 解释 |
---|---|---|---|
N | N |
Noel、noël、Noël 和 noel,顺序随意 |
|
Y | N |
Noel 和 noel,顺序随意 其后是 noël 和 Noël,顺序随意 |
|
N | Y |
Noel 和 Noël,顺序随意 其后是 noël 和 noel,顺序随意 |
|
Y | Y |
Noel noel Noël noël |
|
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |