Trafodion 對中文的支援
阿新 • • 發佈:2019-01-26
在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.