1. 程式人生 > >Trafodion 對中文的支援

Trafodion 對中文的支援

在Trafodion資料庫,當我們設定一個欄位型別為字元型別的時候(如CHAR或VARCHAR),字元編碼會以資料庫預設的字元編碼為準。

比如下面例子,建立有一個字元型別欄位的表,通過SHOWDDL命令可以看到這個欄位的編碼方式為ISO88591。

SQL>drop table seabase.test_chinese;
create table seabase.test_chinese (rol_a varchar(10));
showddl seabase.test_chinese;
--- SQL operation complete.

SQL>
--- SQL operation complete.

SQL>


CREATE TABLE TRAFODION.SEABASE.TEST_CHINESE
  (
    ROL_A                            VARCHAR(10) CHARACTER SET ISO88591 COLLATE
      DEFAULT DEFAULT NULL SERIALIZED
  )
;

--- SQL operation complete.

此時如果想插入中文字元會報錯,解決方法就是修改字元的編碼型別為UTF8。
SQL>insert into seabase.test_chinese values('中國');

*** ERROR[8690] An invalid character value encountered in TRANSLATE function. [2016-10-25 06:22:47]

SQL>alter table seabase.test_chinese alter column rol_a varchar(10) character set utf8;

--- SQL operation complete.

現在我們再通過SHOWDDL檢視欄位屬性已修改為UTF8型別,這時插入中文字元成功。
SQL>showddl seabase.test_chinese;


CREATE TABLE TRAFODION.SEABASE.TEST_CHINESE
  (
    ROL_A                            VARCHAR(10 CHARS) CHARACTER SET UTF8
      COLLATE DEFAULT DEFAULT NULL SERIALIZED /*altered_col*/
  )
;

--- SQL operation complete.

SQL>insert into seabase.test_chinese values('中國');

--- 1 row(s) inserted.

SQL>select * from seabase.test_chinese;

ROL_A
----------------------------------------
中國

--- 1 row(s) selected.

當然我們也可以在建表的時候直接定義欄位型別為UTF8,方法如下

SQL>create table test_chinese(rol_a varchar(10) character set utf8);

--- SQL operation complete.

SQL>showddl test_chinese;


CREATE TABLE TRAFODION.SEABASE.TEST_CHINESE
  (
    ROL_A                            VARCHAR(10 CHARS) CHARACTER SET UTF8
      COLLATE DEFAULT DEFAULT NULL NOT SERIALIZED
  )
 ATTRIBUTES ALIGNED FORMAT
;

--- SQL operation complete.