使用统一码校对算法(UCA)校对数据库的最佳做法

更新使用 UCA 整理的Db2数据库时,在处理字符类型数据时需要特别小心。 Db2 使用的基于 UCA 的统一码国际组件(ICU)的每个更新版本都可能包括错误修复、安全修复以及描述语言的 CLDR 数据和算法的更新。 因此,更新 ICU 版本会影响使用字符数据的对象的排序和比较规则。

UCA 整理下的字符数据使用定义基于本地字符序列的规则进行排序,并提供指定大小写敏感性、重音符号、文本规范化、变量 Top 属性控制和标点符号处理的选项。 有关 UCA 整理属性的信息,请参见基于统一码整理算法的整理中的表 1。

不同版本的ICU可以使用不同版本的CLDR数据和校对算法,这可能会影响使用字符串类型的对象的排序和比较规则(校对)。 从Db2® 12.1 开始,特定版本的Db2只支持一个版本的 ICU,并且不与以前的版本保持兼容。

最佳做法是,避免在数据库对象上使用charvarchar数据类型的字符串列,因为它们会受到数据库校对的影响。 当刷新Db2的 ICU 支持级别时,此类数据类型的行为可能会发生变化。 在升级到新的修改包或版本时,避免对象中的这些键入列可以提高兼容性、效率、长期维护和操作简便性。

使用字符型字符串列可能会影响以下数据库对象:
索引
字符列上的索引使用数据库校对作为默认校对。 排序顺序的改变可能会导致排序和比较不正确,当转移到刷新 ICU 支持级别的Db2版本时,可能需要重建索引。
具体化查询表 (MQT)
如果 MQT 是基于对校对敏感的字符串列构建的,那么在刷新Db2ICU 支持级别后,可能需要重新构建 MQT。 这也适用于 MQT 使用字符函数,或显式或隐式施放时。
数据分区密钥
校对方式的改变会影响 DPF 节点的数据分区。 在转移到 ICU 级别已更改的Db2版本时,可能需要使用存储过程ADMIN_MOVE_TABLE重建表,以确保表的分区正确,并反映校对规则的更改。
字符列上的范围分割
更改校对会影响字符列的范围划分。 当转移到 ICU 级别已更改的Db2版本时,可能需要使用存储过程ADMIN_MOVE_TABLE重建表,以确保表的分区正确反映校对规则的更改。
多维聚类(MDC)
在 MDC 维度中使用数字类型,以避免在Db2刷新 ICU 支持级别时重建 MDC。
注意:如果磁盘上有需要排序的字符数据,请尽可能将这些列定义为 FOR BIT DATA,以便在不同的 ICU 版本中提供一致的行为。