Trafodion主要提供了以下三种字符集编码方式:
- ISO88591,单字节字符集,适用于US ASCII及西欧字符集。
- UTF8,1~4字节可变长字符集,Unicode统一字符集。
- UCS2,2字节固定长度字符集,Unicode统一字符集。UCS2是UTF-16的子集。
通过以上描述,我们可以得出结论,
- ISO88591是无法存储中文的,插入中文会报8690错误。
SQL>create table test_iso88591(a varchar(5));
--- SQL operation complete.
SQL>insert into test_iso88591 values('abcde');
--- 1 row(s) inserted.
SQL>insert into test_iso88591 values('中国');
*** ERROR[8690] An invalid character value encountered in TRANSLATE function. Source charset UNICODE , Target charset ISO88591. Error data in HEX: 2d4efd56 . [2018-11-08 09:52:00]
- UTF8和UCS2可以存储中文,但UTF8存储中文占用3个byte,存储英文占1个byte,而UCS2均占用2个byte。
//utf8
SQL>create table test_utf8(a varchar(5) character set utf8);
--- SQL operation complete.
SQL>insert into test_utf8 values('中国');
--- 1 row(s) inserted.
SQL>insert into test_utf8 values('abc');
--- 1 row(s) inserted.
SQL>select a,octet_length(a) from test_utf8;
A (EXPR)
-------------------- ----------
中国 6
abc 3
//ucs2
SQL>create table test_ucs2(a varchar(5) character set ucs2);
--- SQL operation complete.
SQL>insert into test_ucs2 values('中国');
--- 1 row(s) inserted.
SQL>insert into test_ucs2 values('abc');
--- 1 row(s) inserted.
SQL>select a,octet_length(a) from test_ucs2;
A (EXPR)
---------- ----------
中国 4
abc 6
--- 2 row(s) selected.
- 纯英文/数字的字符适合存放为ISO88591或UTF8,因为只占用一个字节。