DB2 UTF8 存储配置

DB2 UTF8 storage configuration

我有 DB2 数据库,我已经用 varchar(x) 定义了表,但似乎 x - 不是字符数而是字节数。是否有可能以某种方式动态地解决问题?还是我应该更新我的表格?

UTF-8 字符可以用 1 到 4 个字节长的字节序列表示,因此不可能预先知道包含 x 个 Unicode 字符的 UTF-8 字符串的最大字节长度.

从 DB2 10.5 修订包 4(所谓的 "Cancun release")开始,您可以在定义列时 specify string length unitsVARCHAR(x OCTETS) 表示 x 字节; VARCHAR(x CODEUNITS16) 表示 x 个两字节字符,VARCHAR(x CODEUNITS32) 表示 x 个四字节字符。

如果您没有明确指定单位,则默认值来自 string_units 数据库配置参数和 NLS_STRING_UNITS 全局变量。

GRAPHICVARGRAPHIC 数据类型也遵循相同的单位规范,尽管它们的默认单位是 2 字节字符,而不是八位字节。

请注意,字符和 CLOB 列仍然受到与以前相同的长度限制:例如,VARCHAR 列的最大长度为 32672 字节(OCTETS),或 16336 CODEUNITS16,或 8168 CODEUNITS32.