/*
DATABASES:
ORIONDB (codeset UTF-8)
BIG5DB (codeset BIG5)
TABLES:
ORIONDB.UTF8_TAB
BIG5DB.BIG5_TAB
Create nickname UTF8_TAB on Database BIG5DB for ORIONDB.UTF8_TAB
Create nickname BIG5_TAB on Database ORIONDB for BIG5DB.BIG5_TAB
Insert multi-byte characters respectively
*/
/* check codeset on ORIONDB */
C:\>db2 get db cfg for oriondb
資料庫 oriondb 的資料庫配置
資料庫配置版次 = 0x0c00
資料庫版次 = 0x0c00
資料庫專屬區 = TW
資料庫字碼頁 = 1208
資料庫字碼集 = UTF-8
資料庫國碼/地區碼 = 88
資料庫對照順序 = IDENTITY
‧
‧
‧
/* Create Database BIG5DB */
create database big5db on 'c:\' using codeset BIG5 TERRITORY TW COLLATE using SYSTEM
C:\>db2 get db cfg for big5db
資料庫 big5db 的資料庫配置
資料庫配置版次 = 0x0c00
資料庫版次 = 0x0c00
資料庫專屬區 = TW
資料庫字碼頁 = 950
資料庫字碼集 = big5
資料庫國碼/地區碼 = 88
資料庫對照順序 = UNIQUE
‧
‧
‧
/* Connect to BIG5DB */
C:\>db2 connect to big5db
資料庫連線資訊
資料庫伺服器 = DB2/NT 9.5.0
SQL 授權 ID = ORION
本地資料庫別名 = BIG5DB
/* Create Table BIG5_TAB on BIG5DB */
CREATE TABLE BIG5_TAB
(
COL1 VARCHAR(10)
) IN USERSPACE1
INSERT INTO BIG5_TAB VALUES ('BIG-5')
/*
Create Wrapper and Server on database BIG5DB for database ORIONDB
to create nickname later.
Server name: BIG5DB
*/
/* Connect to ORIONDB */
C:\>db2 connect to oriondb
資料庫連線資訊
資料庫伺服器 = DB2/NT 9.5.0
SQL 授權 ID = ORION
本地資料庫別名 = ORIONDB
/* Create Table UTF8_TAB on ORIONDB */
CREATE TABLE UTF8_TAB
(
COL1 VARCHAR(12)
) IN USERSPACE1
INSERT INTO UTF8_TAB VALUES ('UTF8')
/* Create Nickname BIG5_TAB on ORIONDB */
C:\>db2 create nickname orion.big5_tab for big5db.orion.big5_tab
DB20000I SQL 指令已順利完成。
/*
Back to BIG5DB
Create Nickname UTF8_TAB on BIG5DB
*/
C:\>db2 connect to big5db
資料庫連線資訊
資料庫伺服器 = DB2/NT 9.5.0
SQL 授權 ID = ORION
本地資料庫別名 = BIG5DB
C:\>db2 create nickname orion.utf8_tab for oriondb.orion.utf8_tab
DB20000I SQL 指令已順利完成。
C:\>db2 select * from utf8_tab
COL1
------------
UTF8
已選取 1 個記錄。
/* Check Nickname Layout */
C:\>db2 describe table utf8_tab
直欄名稱 綱目 資料類型名稱 長度 比例 Null
------- --------- ------------ ------ ---- ------
COL1 SYSIBM VARCHAR 12 0 是
已選取 1 個記錄。
/* Check Data using HEX */
C:\>db2 select hex(col1) from utf8_tab fetch first 1 row only
1
------------------------
EFBCB5EFBCB4EFBCA6EFBC98
已選取 1 個記錄。
/* Check HEX Data which Database BIG5DB use exactly */
C:\>db2 select hex('一') from sysibm.sysdummy1
1
----
A440
已選取 1 個記錄。
/* It would be failed as inserting more than four multi-byte characters */
C:\>db2 insert into utf8_tab values ('一二三四五')
DB21034E 指令被當作 SQL 陳述式處理,因為他不是有效的「指令行處理器」指令。 在SQL 處理程序期間,他已傳回:
SQL1822N 從資料來源 "ORIONDB" 接收到的非預期錯誤碼"22001"。相關的文字及記號為 "func="SQLExecute" msg=" SQL0433N 值 "一二三四五"太長。"。 SQLSTATE=560BD
C:\>db2 insert into utf8_tab values ('一二三四')
DB20000I SQL 指令已順利完成。
/* Back to Database ORIONDB */
C:\>db2 connect to oriondb
資料庫連線資訊
資料庫伺服器 = DB2/NT 9.5.0
SQL 授權 ID = ORION
本地資料庫別名 = ORIONDB
/*
two multi-byte characters are failed to select
real value is 'BIG-5'
*/
C:\>db2 select * from big5_tab
COL1
----------
BIG
已選取 1 個記錄。
/* Check Nickname Layout */
C:\>db2 describe table big5_tab
直欄名稱 綱目 資料類型名稱 長度 比例 Null
------- --------- ------------ ------ ---- ------
COL1 SYSIBM VARCHAR 10 0 是
已選取 1 個記錄。
/* You can insert precise length data, but fail to select completely */
C:\>db2 insert into big5_tab values ('一二三四五')
DB20000I SQL 指令已順利完成。
C:\>db2 select * from big5_tab
COL1
----------
BIG
一二三
已選取 2 個記錄。
/* Check hex data from big5_tab */
C:\>db2 select hex(col1) from big5_tab fetch first 1 row only
1
------------------------------
A2D0A2D7A2D5A1D0A2B4
已選取 1 個記錄。
/* Check HEX Data which Database ORIONDB use exactly */
C:\>db2 select hex('一') from sysibm.sysdummy1
1
------
E4B880
已選取 1 個記錄。
/*
Alter nickname big5_tab (length / 2 * 3)
to show whole data
*/
C:\>db2 alter nickname orion.big5_tab alter column col1 local type varchar(15)
DB20000I SQL 指令已順利完成。
C:\>db2 select * from big5_tab
COL1
---------------
BIG-5
一二三四五
已選取 2 個記錄。
/*
after delete record where col1 = '一二三四五'
I found something really odd:
select with fetch or not will have very different result on hex
*/
C:\>db2 select hex(col1) from big5_tab
1
--------------------
EFBCA2EFBCA9EFBCA720
已選取 1 個記錄。
C:\>db2 select hex(col1) from big5_tab fetch first 1 row only
1
--------------------
A2D0A2D7A2D5A1D0A2B4
已選取 1 個記錄。
/* And it happened on Multi-Byte Characters */
/*
Back to BIG5DB
Create Nickname UTF8_TAB2 on BIG5DB
*/
C:\>db2 connect to big5db
資料庫連線資訊
資料庫伺服器 = DB2/NT 9.5.0
SQL 授權 ID = ORION
本地資料庫別名 = BIG5DB
C:\>db2 create table big5_tab2 ( col1 integer,col2 varchar(10) ) in userspace1
DB20000I SQL 指令已順利完成。
/* insert testing data */
inesrt into big5_tab2 values (1,'odd'),(2,'ODD')
/* Connect ORIONDB again */
C:\>db2 connect to oriondb
資料庫連線資訊
資料庫伺服器 = DB2/NT 9.5.0
SQL 授權 ID = ORION
本地資料庫別名 = ORIONDB
C:\>db2 create nickname orion.big5_tab2 for big5db.orion.big5_tab2
DB20000I SQL 指令已順利完成。
C:\>db2 select col1,col2,hex(col2) from big5_tab2 fetch first 2 row only
COL1 COL2 3
----- ------ --------------------
1 odd 6F6464
2 ODD A2DDA2D2A2D2
已選取 2 個記錄。
C:\>db2 select col1,col2,hex(col2) from big5_tab2
COL1 COL2 3
---- ------ --------------------
1 odd 6F6464
2 ODD EFBCAFEFBCA4EFBCA4
已選取 2 個記錄。