我有DB2数据库,并且我已经用
varchar(x)
定义了表,但似乎x
- 不是字符数而是字节数。是否有可能以某种方式动态地解决问题?或者我应该更新我的表格吗?
UTF-8 字符可以用 1 到 4 个字节长的字节序列表示,因此无法提前知道包含
x
Unicode 字符的 UTF-8 字符串的最大字节长度。
从 DB2 10.5 修复包 4(所谓的“坎昆版本”)开始,您可以在定义列时 指定字符串长度单位:
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
.