我正在尝试对 VARCHAR(120) 列的请求进行建模,但实际上将存储 480 个字节。
480 的长度被确定为 VARCHAR (120) = 120 x 4 = 480 字节。这是由于字符串单元规范代码单元 32。这意味着每 1 个字符将占用 4 个字节。
我不确定 DDL 的语法。我的研究表明,在创建表期间应该有一个语句将字符集设置为 UTF-32,但我不确定。这是针对 DB2 Mid-Tier(非大型机)的
这是我发现的东西,但我不确定它是否有效,也不确定它如何COLLATE
工作。
ALTER TABLE table_name
MODIFY column_name VARCHAR(255)
CHARACTER SET utf8
COLLATE utf8_unicode_ci;
任何帮助,将不胜感激!
答案1
无法声明 UTF-32 类型的列。
您需要将列定义为VARCHAR(480)
,然后CODEUNITS32
在访问该列时使用将其转换为 UTF-32。
例子:
SELECT CHARACTER_LENGTH(NAME,CODEUNITS32) FROM T1 WHERE NAME = 'Jürgen';
SET :POSITION = LOCATE_IN_STRING('Jürgen lives on Hegelstraße','ß',-1,CODEUNITS32);
IBM 的一些参考资料:
答案2
对于 DB2 LUW,只需将列声明为VARCHAR(120 CODEUNITS32)
。Db2 将以 UTF-8 格式存储数据,最多只允许 120 个字符,但最多允许 480 个字节。
create table T(C VARCHAR(e CODEUNITS32))
insert into t values '€£