2008年7月11日 星期五

DB2中文問題

哀阿...
昨天才從同事口中得知中文varchar在DB2 UTF-8資料庫中一個中文字有三個bytes怎會如此咧??

OK......
先看看下面:


-- DB
-- codePage =1208 (=x04B8) Unicode - UTF-8
-- codeSet = UTF-8
-- TERRITORY = TW
CREATE DATABASE TESTDB ON c: USING CODESET UTF-8 TERRITORY TW COLLATE USING IDENTITY ;

create table test (field1 varchar(10)); --10 byte
insert into test values('1234567890'); --ok
insert into test values('一二三四五六七八九零'); --err , too long
insert into test values(N'一二三四五六七八九零'); --err, too long
select length('一二三四五六七八九零'),length(N'一二三四五六七八九零') from test --30,10

create table test2 (field2 vargraphic(10) ); --30 byte
insert into test2 values('1234567890'); --ok
insert into test2 values('一二三四五六七890'); --ok
select length('一二三四五六七八九零'),length(N'一二三四五六七八九零') from test2; --30,10
select length(field2) from test2;

select field2,length(field2) AS LEN from test2 --不論中英文,每個字元在string function中長度都是1
select field2,Substr(field2,1,2) from test2 --Graphic也可以用於字串函數

-- 所以varGraphic= MSSQL的nvarchar
-- N'xxxStr' 代表 varGraphic型態


所以說在開table時下的ddl應該使用Graphic和varGraphic型態,
在使用起來會比較順...

至於char和graphic差在哪... 會不會有效能上的考量....

找到資料後再說......


===================================================================
另外幾個與DB2中文處理的相關文章: