服务器 频道

DB2用户定义函数实现多种语言的排序

【IT168 服务器学院】当在 DB2 UDB 数据库中存储多语种数据时,Unicode 往往是惟一一种能够适应整个数据范围的编码。DB2 可以存储和处理 Unicode 数据,但是它的排序功能只限于二进制排序和三种文化排序。另外,一个数据库只能有一种排序规则,这是在创建数据库时决定的。对于需要支持多种语言的用户和数据的数据库,这些排序限制是一个明显的难题。

IBM 创建了一个用于管理 Unicode 数据的函数库,称为 ICU(International Components for Unicode)。这个库为 C 和 Java™ 编程语言提供了一整套操作 Unicode 数据的函数。这个库是在一种无限制的开放源码许可证下发布的,这使它可以在许多应用程序中使用。

ICU 提供的函数实现了标准的 Unicode Collation Algorithm(UCA)以及许多文化调整功能。很容易将适当的 ICU 函数组合成一个 UDF(用户定义函数),从而让 DB2 可以充分利用 ICU 的排序支持。(随便说一句,DB2 for Linux, UNIX, and Windows 就是使用 ICU 库来实现在 Unicode 数据上支持的三种文化排序。)

本文主要关注 DB2 V8 for Linux, UNIX, and Windows,但是这个 UDF 示例也可以用在即将发布的 Viper 上。这个 UDF 也应该能够用在 DB2 V7 FP3 或更高版本上,但是这没有经过测试。另外,这个 UDF 可能能够用在 DB2 for zSeries® 和 iSeries™ 上,但是这没有经过测试,本文也不讨论这些平台。

安装示例数据库

本文假设要使用的数据库称为 SAMPLE,但是可以使用任何数据库。无论使用哪个数据库,它必须是 Unicode 数据库。为了判断一个数据库是否是 Unicode 数据库,执行以下命令:

db2 get database configuration for sample

接近配置信息顶部的 “Database code page” 条目必须是 “utf-8”。如果没有 Unicode 数据库可用,那么可以用以下命令创建一个:

db2 create database sample using codeset utf-8 territory ca

本文提供了针对 32 位 Intel 和 AMD 平台的二进制代码。下面介绍在 Linux 和 Windows 上如何安装预构建的二进制代码。对于所有其他平台,编译 ICU 和 UDF 中提供了说明。

针对 Linux(32 位 Intel 或 AMD)预构建的二进制代码

要在 Linux 上安装预构建的二进制代码:

从 “下载” 中下载文件 sortkey-linux-x86.zip 并将它解压到一个临时目录中。将以下文件:

sortkey
    libicui18n.so.34
    libicuuc.so.34
    libicudata.so.34

复制到 sqllib/function 中。

连接到数据库,并运行 DDL 脚本来对这个函数进行编目:

db2 connect to sample
    db2 -tvf createfn.db2

注:这个 Linux 预构建二进制代码是在 Red Hat Linux 7.2 上用 gcc 2.96 编译的。

0
相关文章