ICU 排序顺序
使用 International Components for Unicode (ICU) 排序顺序表时,数据库将使用特定于语言的规则根据表的语言环境来确定数据的权重。
例如,名为 en_us (美国语言环境) 的 ICU 排序顺序表可以与另一个名为 fr_FR (法语语言环境) 的 ICU 表以不同方式对数据进行排序。
ICU 支持(IBM i选项 39)可正确处理未归一化的数据,产生的结果与归一化数据相同。 ICU 排序顺序表可以对所有字符,图形和 Unicode (UTF-8, UTF-16 和 UCS-2) 数据进行排序。
例如,名为 NAME 的 UTF-8 字符列包含以下名称 (也提供了该列的十六进制值)。
| 名称 | 十六进制(名称) |
|---|---|
| 戈麦斯 | 47C3B36D657A |
| 戈默 | 476F6D6572 |
| 古姆比 | 47756D6279 |
*HEX 排序顺序按如下所示对 NAME 值进行排序。
| 名称 |
|---|
| 戈默 |
| 古姆比 |
| 戈麦斯 |
名为 en_us 的 ICU 排序顺序表正确对 NAME 值进行排序,如下所示。
| 名称 |
|---|
| 戈默 |
| 戈麦斯 |
| 古姆比 |
当指定 ICU 排序顺序表时,使用该表的 SQL 语句的性能可能比使用非 ICU 排序顺序表或使用 *HEX 排序顺序的 SQL 语句的性能低得多。 由于调用 ICU 支持以获取需要排序的每个数据的加权值,因此性能较慢。 ICU 排序顺序表可以提供更多排序功能,但代价是运行速度较慢的 SQL 语句。 但是,可以在列上创建使用 ICU 排序顺序表创建的索引,以帮助减少调用 ICU 支持的需求。 在此情况下,索引键已包含 ICU 加权值,因此无需调用 ICU 支持。