Oracle字符集 ZHS16GBK VS WE8ISO8859P1
-- 測試指令碼如下:
-- 字符集WE8ISO8859P1,國家字符集AL16UTF16
-- nchar型別
set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
drop table utf16_1;
create table utf16_1 (nc1 nchar(1),nc2 nchar(2),nc3 nchar(3) );
insert into utf16_1 values('a','測','從1');
dump結果:
select dump(nc1),dump(nc2),dump(nc3) from utf16_1;
Typ=96 Len=2: 0,97
Typ=96 Len=4: 0,178,0,226
Typ=96 Len=6: 0,180,0,211,0,49
-- char型別
drop table utf16_2;
create table utf16_2 (c1 char(1),c2 char(2),c3 char(3) );
insert into utf16_2 values('a','測','從1');
dump結果:
select dump(c1),dump(c2),dump(c3) from utf16_2;
Typ=96 Len=1: 97
Typ=96 Len=2: 178,226
Typ=96 Len=3: 180,211,49
結論:ISO8859P1這類單位元組字符集,nchar和char的區別是nchar雙位元組儲存,char單位元組儲存,字元編碼一樣。
-- 字符集ZHS16GBK,國家字符集AL16UTF16
set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
-- nchar型別
drop table utf16_1;
create table utf16_1 (nc1 nchar(1),nc2 nchar(2),nc3 nchar(3) );
insert into utf16_1 values('a','測','從1');
dump結果:
select dump(nc1),dump(nc2),dump(nc3) from utf16_1;
Typ=96 Len=2: 0,97
Typ=96 Len=4: 109,75,0,32
Typ=96 Len=6: 78,206,0,49,0,32
-- char型別
drop table utf16_2;
create table utf16_2 (c1 char(1),c2 char(2),c3 char(3) );
insert into utf16_2 values('a','測','從1');
dump結果:
select dump(c1),dump(c2),dump(c3) from utf16_2;
Typ=96 Len=1: 97
Typ=96 Len=2: 178,226
Typ=96 Len=3: 180,211,49
結論:GBK字符集,nchar和char的區別是nchar雙位元組儲存,char單位元組儲存,字元編碼不一樣。
Oracle的國家字符集跟字符集還有關係,這個跟先前理解的不太一樣,按個人理解,不管字符集是什麼,國家字符集字元編碼應該是一樣的才對。
-- 字符集WE8ISO8859P1,國家字符集AL16UTF16
-- nchar型別
set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
drop table utf16_1;
create table utf16_1 (nc1 nchar(1),nc2 nchar(2),nc3 nchar(3) );
insert into utf16_1 values('a','測','從1');
dump結果:
select dump(nc1),dump(nc2),dump(nc3) from utf16_1;
Typ=96 Len=2: 0,97
Typ=96 Len=4: 0,178,0,226
Typ=96 Len=6: 0,180,0,211,0,49
-- char型別
drop table utf16_2;
create table utf16_2 (c1 char(1),c2 char(2),c3 char(3) );
insert into utf16_2 values('a','測','從1');
dump結果:
select dump(c1),dump(c2),dump(c3) from utf16_2;
Typ=96 Len=1: 97
Typ=96 Len=2: 178,226
Typ=96 Len=3: 180,211,49
結論:ISO8859P1這類單位元組字符集,nchar和char的區別是nchar雙位元組儲存,char單位元組儲存,字元編碼一樣。
-- 字符集ZHS16GBK,國家字符集AL16UTF16
set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
-- nchar型別
drop table utf16_1;
create table utf16_1 (nc1 nchar(1),nc2 nchar(2),nc3 nchar(3) );
insert into utf16_1 values('a','測','從1');
dump結果:
select dump(nc1),dump(nc2),dump(nc3) from utf16_1;
Typ=96 Len=2: 0,97
Typ=96 Len=4: 109,75,0,32
Typ=96 Len=6: 78,206,0,49,0,32
-- char型別
drop table utf16_2;
create table utf16_2 (c1 char(1),c2 char(2),c3 char(3) );
insert into utf16_2 values('a','測','從1');
dump結果:
select dump(c1),dump(c2),dump(c3) from utf16_2;
Typ=96 Len=1: 97
Typ=96 Len=2: 178,226
Typ=96 Len=3: 180,211,49
結論:GBK字符集,nchar和char的區別是nchar雙位元組儲存,char單位元組儲存,字元編碼不一樣。
Oracle的國家字符集跟字符集還有關係,這個跟先前理解的不太一樣,按個人理解,不管字符集是什麼,國家字符集字元編碼應該是一樣的才對。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6906/viewspace-2109891/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 修改Oracle字符集為ZHS16GBKOracle
- 更改Oracle字符集:把字符集ZHS16GBK換成UTF8Oracle
- Oracle 11g 修改字符集 為 ZHS16GBKOracle
- oracle字符集轉換(ZHS16GBK轉AL32UTF8)Oracle
- US7ASCII字符集轉換為ZHS16GBKASCII
- 測試用 oracle11g更改字符集AL32UTF8為ZHS16GBKOracle
- 【ORDER BY】在ZHS16GBK字符集下Oracle漢字排序依據亦是二進位制編碼非拼音Oracle排序
- Oracle字符集Oracle
- Oracle 字符集Oracle
- linux 字符集和oracle 字符集LinuxOracle
- Oracle字符集和國家字符集Oracle
- 字符集為ZHS16GBK的資料庫匯入到字符集為AL32UTF8的資料庫資料庫
- Oracle 字符集修改Oracle
- 修改oracle字符集Oracle
- oracle修改字符集Oracle
- oracle字符集修改Oracle
- oracle 修改字符集Oracle
- ORACLE字符集(zt)Oracle
- oracle更改字符集Oracle
- 搞懂oracle字符集Oracle
- oracle 字符集 (轉)Oracle
- 【exp/imp】將US7ASCII字符集的dmp檔案匯入到ZHS16GBK字符集的資料庫中ASCII資料庫
- 【字符集】論Oracle字符集“轉碼”過程Oracle
- Oracle字符集介紹Oracle
- Oracle 字符集小結Oracle
- 理解ORACLE 字符集【轉】Oracle
- oracle之修改字符集Oracle
- oracle字符集問題Oracle
- oracle中字符集列表Oracle
- ORACLE字符集簡介Oracle
- ORACLE11G中us7ascii 字符集匯出檔案匯入zhs16gbk 庫中亂碼問題處理OracleASCII
- oracle國家字符集與資料庫字符集Oracle資料庫
- Oracle字符集的檢視查詢和Oracle字符集的設定修改Oracle
- ZHS16CGB231280 --> ZHS16GBK 字符集轉換,exp/imp 注意事項
- oracle字符集相關整理Oracle
- Oracle修改資料字符集Oracle
- 修改oracle client 的字符集Oracleclient
- oracle字符集的更改【轉】Oracle