Oracle 資料型別CHAR, NCHAR, VARCHAR2, NVARCHAR2

eric0435發表於2012-10-25
CHAR與VARCHAR2
字元資料通常是以單位元組儲存在資料庫字符集中:
CHAR
--固定長度的字串最長可達2000個位元組
--內部程式碼:96
VARCHAR@
--可變長的字串最長可達4000個位元組
--內部程式碼:1

CHAR
在一個型別為char的列中,所有空位元組都會用空格來補充(字元32)
它的長度是固定的 
SQL> select gr03,dump(gr03) from wb02 where gr03
 
GR03             DUMP(GR03)
---------------- ---------------------------------------------------------------
4307050000000091 Typ=96 Len=16: 52,51,48,55,48,53,48,48,48,48,48,48,48,48,57,49
4307050000000092 Typ=96 Len=16: 52,51,48,55,48,53,48,48,48,48,48,48,48,48,57,50
430705000000093  Typ=96 Len=16: 52,51,48,55,48,53,48,48,48,48,48,48,48,48,57,51
4307050000000094 Typ=96 Len=16: 52,51,48,55,48,53,48,48,48,48,48,48,48,48,57,52
43070500000095   Typ=96 Len=16: 52,51,48,55,48,53,48,48,48,48,48,48,48,48,57,53
從上面的輸出typ=96,len=16,可以看出char的內部程式碼是96,長度是16

varchar2
在一個型別為varchar2的列中,oracle不會使用空格來進行補位
它的長度是可變的
SQL> select dw02,dump(dw02) from wb01 where dw01
 
DW02                       DUMP(DW02)
-------------------------- --------------------------------------------------------------------------------
靈活人員                   Typ=1 Len=8: 193,233,187,238,200,203,212,177
靈活就業人員               Typ=1 Len=12: 193,233,187,238,190,205,210,181,200,203,212,177
西湖區委、區管委           Typ=1 Len=16: 206,247,186,254,199,248,206,175,161,162,199,248,185,220,206,175
西湖區委、區管委辦公室     Typ=1 Len=22: 206,247,186,254,199,248,206,175,161,162,199,248,185,220,206,175,17
西湖管理區政治部           Typ=1 Len=16: 206,247,186,254,185,220,192,237,199,248,213,254,214,206,178,191
西湖管理區監察局           Typ=1 Len=16: 206,247,186,254,185,220,192,237,199,248,188,224,178,236,190,214
西湖管理區財政局           Typ=1 Len=16: 206,247,186,254,185,220,192,237,199,248,178,198,213,254,190,214
從上面的輸出typ=1可以看出varchar2的內部程式碼是1,它的長度不是固定的

nchar與nvarchar2
字元資料也可以儲存在國際(多位元組)字符集中
nchar
--固定長度的字串最大可達2000個位元組
--內部程式碼:96

nvarchar2
--可變長度的字串最大可達4000個位元組
--內部程式碼:1

nchar
在一個型別為nchar的列中,所有空位元組都會用空格來補充(字元32)
它的長度是固定的 
SQL> desc wb02_jy
Name Type      Nullable Default Comments 
---- --------- -------- ------- -------- 
GR03 NCHAR(18) Y   

SQL> select gr03,dump(gr03) from wb02_jy;
 
GR03                                 DUMP(GR03)
----------------------------- --------------------------------------------------------------------------------
4307050000000091              Typ=96 Len=36: 0,52,0,51,0,48,0,55,0,48,0,53,0,48,0,48,0,48,0,48,0,48,0,48,0,48,
4307050000000092              Typ=96 Len=36: 0,52,0,51,0,48,0,55,0,48,0,53,0,48,0,48,0,48,0,48,0,48,0,48,0,48,
4307050000000093              Typ=96 Len=36: 0,52,0,51,0,48,0,55,0,48,0,53,0,48,0,48,0,48,0,48,0,48,0,48,0,48,
4307050000000094              Typ=96 Len=36: 0,52,0,51,0,48,0,55,0,48,0,53,0,48,0,48,0,48,0,48,0,48,0,48,0,48,
4307050000000095              Typ=96 Len=36: 0,52,0,51,0,48,0,55,0,48,0,53,0,48,0,48,0,48,0,48,0,48,0,48,0,48,
如上輸出一樣gr03定義為nchar(18),但是它是雙位元組所以長度len=36是18的2倍,內部程式碼還是與char一樣96


nvarchar2
在一個型別為nvarchar2的列中,oracle不會使用空格來進行補位
它的長度是可變的
SQL> select dw02,dump(dw02) from wb01_jy;
 
DW02                            DUMP(DW02)
----------------------------- --------------------------------------------------------------------------------
靈活人員                      Typ=1 Len=8: 112,117,109,59,78,186,84,88
靈活就業人員                  Typ=1 Len=12: 112,117,109,59,92,49,78,26,78,186,84,88
西湖區委、區管委              Typ=1 Len=16: 137,127,110,86,83,58,89,212,48,1,83,58,123,161,89,212
西湖區委、區管委辦公室        Typ=1 Len=22: 137,127,110,86,83,58,89,212,48,1,83,58,123,161,89,212,82,158,81,10
西湖管理區政治部              Typ=1 Len=16: 137,127,110,86,123,161,116,6,83,58,101,63,108,187,144,232
西湖管理區監察局              Typ=1 Len=16: 137,127,110,86,123,161,116,6,83,58,118,209,91,223,92,64
西湖管理區財政局              Typ=1 Len=16: 137,127,110,86,123,161,116,6,83,58,141,34,101,63,92,64
西湖管理區勞動保障局          Typ=1 Len=20: 137,127,110,86,123,161,116,6,83,58,82,179,82,168,79,221,150,156,92
西湖管理區農村經濟開發局      Typ=1 Len=24: 137,127,110,86,123,161,116,6,83,58,81,156,103,81,126,207,109,78,95
西湖管理區衛生局              Typ=1 Len=16: 137,127,110,86,123,161,116,6,83,58,83,107,117,31,92,64
西湖管理區國土局              Typ=1 Len=16: 137,127,110,86,123,161,116,6,83,58,86,253,87,31,92,64
西湖管理區移民開發局          Typ=1 Len=20: 137,127,110,86,123,161,116,6,83,58,121,251,108,17,95,0,83,209,92,6
西湖管理區經貿局              Typ=1 Len=16: 137,127,110,86,123,161,116,6,83,58,126,207,141,56,92,64

從上面的輸出typ=1可以看出nvarchar2的內部程式碼是1,它的長度不是固定的

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-747233/,如需轉載,請註明出處,否則將追究法律責任。

下一篇: oracle的undo的作用
Oracle 資料型別CHAR, NCHAR, VARCHAR2, NVARCHAR2
請登入後發表評論 登入
全部評論

相關文章