Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 数据库管理 » 配置数据库 » 国际语言和字符集 » 了解归类

 

Unicode 归类算法 (UCA)

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,顺序随意

  • 非重音在重音之前,因此 e 在 ë 前面

  • 忽略大小写,N 和 n 在每个两元组中都以随机顺序排列

N Y

Noel 和 Noël,顺序随意

其后是

noël 和 noel,顺序随意

  • 大写字母在小写字母之前,因此 N 在 n 前面

  • 忽略重音,e 和 ë 在每个两元组中都以随机顺序排列

Y Y

Noel

noel

Noël

noël

  • 非重音在重音之前,因此 e 在 ë 前面

  • 大写字母在小写字母之前,因此 N 在 n 前面