我有DB2数据库,我已经使用varchar(x)
定义了表,但似乎x
- 不是字符数,而是字节数。有可能以某种方式动态修复问题吗?或者我应该更新我的桌子?
答案 0 :(得分:0)
UTF-8字符可以由1到4个字节长的字节序列表示,因此不可能事先知道包含x
个Unicode字符的UTF-8字符串的最大字节长度。 / p>
从DB2 10.5修订包4开始(所谓的" Cancun版本")在定义列时可以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 {{1 },或8168 CODEUNITS16
。