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 units:VARCHAR(x OCTETS)
表示 x 字节; VARCHAR(x CODEUNITS16)
表示 x 个两字节字符,VARCHAR(x CODEUNITS32)
表示 x 个四字节字符。
如果您没有明确指定单位,则默认值来自 string_units
数据库配置参数和 NLS_STRING_UNITS
全局变量。
GRAPHIC
和 VARGRAPHIC
数据类型也遵循相同的单位规范,尽管它们的默认单位是 2 字节字符,而不是八位字节。
请注意,字符和 CLOB 列仍然受到与以前相同的长度限制:例如,VARCHAR
列的最大长度为 32672 字节(OCTETS
),或 16336 CODEUNITS16
,或 8168 CODEUNITS32
.
我有 DB2 数据库,我已经用 varchar(x)
定义了表,但似乎 x
- 不是字符数而是字节数。是否有可能以某种方式动态地解决问题?还是我应该更新我的表格?
UTF-8 字符可以用 1 到 4 个字节长的字节序列表示,因此不可能预先知道包含 x
个 Unicode 字符的 UTF-8 字符串的最大字节长度.
从 DB2 10.5 修订包 4(所谓的 "Cancun release")开始,您可以在定义列时 specify string length units:VARCHAR(x OCTETS)
表示 x 字节; VARCHAR(x CODEUNITS16)
表示 x 个两字节字符,VARCHAR(x CODEUNITS32)
表示 x 个四字节字符。
如果您没有明确指定单位,则默认值来自 string_units
数据库配置参数和 NLS_STRING_UNITS
全局变量。
GRAPHIC
和 VARGRAPHIC
数据类型也遵循相同的单位规范,尽管它们的默认单位是 2 字节字符,而不是八位字节。
请注意,字符和 CLOB 列仍然受到与以前相同的长度限制:例如,VARCHAR
列的最大长度为 32672 字节(OCTETS
),或 16336 CODEUNITS16
,或 8168 CODEUNITS32
.