亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle基本數據類型存儲格式淺析:字符類型

2024-08-29 13:49:50
字體:
來源:轉載
供稿:網友
  前一陣看完文檔,對Oracle的基本數據類型的存儲格式有了一些了解,最近有做了一些測試進行了驗證?! 〈蛩阏砜偨Y一下,這一篇主要說明字符類型的存儲格式。主要包括char、varchar2和long等幾種類型。
SQL> create table test_char (char_col char(10), varchar_col varchar2(10), long_col long);
表已創建。
SQL> insert into test_char values ('abc', '123', ',fd');
已創建 1 行。
SQL> commit;
提交完成。
SQL> select rowid from test_char;
ROWID
------------------
AAAB3LAAFAAAAAgAAA
  根據rowid的定義規則,第7~9位是表示的是數據文件,F表示5,而10~15位表示的是在這個數據文件中的第幾個BLOCK,g表示32。(rowid編碼相當于64進制。用A~Z a~z 0~9 + /共64個字符表示。A表示0,B表示1,……,a表示26,……,0表示52,……,+表示62,/表示63。)
我們根據計算的結果去dump這個block。
SQL> ALTER SYSTEM DUMP DATAFILE 5 BLOCK 32;
系統已更改。
打開產生的trace文件:
data_block_dump,data header at 0x3421064
===============
tsiz: 0x1f98
hsiz: 0x14
pbl: 0x03421064
bdba: 0x01400020
     76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fSEO=0x1f82
avsp=0x1f6e
tosp=0x1f6e
0xe:pti[0] nrow=1 offs=0
0x12:PRi[0] offs=0x1f82
block_row_dump:
tab 0, row 0, @0x1f82
tl: 22 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [10]  61 62 63 20 20 20 20 20 20 20
col  1: [ 3]  31 32 33
col  2: [ 3]  2c 66 64
end_of_block_dump
End dump data blocks tsn: 5 file#: 5 minblk 32 maxblk 32
  觀察dump出來的結果,可以發現以下幾點:
  1.對于每個字段,除了保存字段的值以外,還會保存當前字段中數據的長度。而且,oracle顯然沒有把字段的長度定義或類型定義保存在block中,這些信息保存在oracle的數據字典里面。
  2. 根據dump的結果,可以清楚的看到,字符類型在數據庫中是以ascii格式存儲的。
SQL> select chr(to_number('61', 'xx')) from dual;
CH
--
a
  3.char類型為定長格式,存儲的時候會在字符串后面填補空格,而varchar2和long類型都是變長的。
SQL> SELECT DUMP(CHAR_COL, 16) D_CHAR FROM TEST_CHAR;
D_CHAR
-------------------------------------------------------------
Typ=96 Len=10: 61,62,63,20,20,20,20,20,20,20
SQL> SELECT DUMP(VARCHAR_COL, 16) D_VARCHAR2 FROM TEST_CHAR;
D_VARCHAR2
-------------------------------------------------------------
Typ=1 Len=3: 31,32,33
SQL> SELECT DUMP(LONG_COL, 16) D_VARCHAR2 FROM TEST_CHAR;
SELECT DUMP(LONG_COL, 16) D_VARCHAR2 FROM TEST_CHAR
            *
ERROR 位于第 1 行:
ORA-00997: 非法使用 LONG 數據類型由于DUMP不支持LONG類型,因此我們使用了alter system dump block的方式,通過比較兩種方式得到的結果,發現DUMP()函數不但方便,結果清楚,而且指出了進行DUMP的數據類型,在以后的例子中,除非必要的情況,否則都會采用DUMP()函數的方式進行說明。
  下面看一下插入中文的情況,首先看一下數據庫的字符集
SQL> select name, value$ from sys.props$ where name like '%CHARACTERSET%';
NAME                           VALUE$

------------------------------ ------------------------------
NLS_CHARACTERSET               ZHS16GBK
NLS_NCHAR_CHARACTERSET         AL16UTF16
SQL> insert into test_char values ('定長', '變長', null);
已創建 1 行。
SQL> SELECT DUMP(CHAR_COL, 16) D_CHAR FROM TEST_CHAR;
D_CHAR
----------------------------------------------------------------
Typ=96 Len=10: 61,62,63,20,20,20,20,20,20,20
Typ=96 Len=10: b6,a8,b3,a4,20,20,20,20,20,20
SQL> SELECT DUMP(VARCHAR_COL, 16) D_VARCHAR2 FROM TEST_CHAR;
D_VARCHAR2
----------------------------------------------------------------
Typ=1 Len=3: 31,32,33
Typ=1 Len=4: b1,e4,b3,a4
  根據dump結果,可以清楚的看出,普通英文字符和標點用一個字節表示,而中文字符或中文標點需要兩個字節來表示。
下面,對比一下nchar和nvarchar2與char、varchar2類型有什么不同。
SQL> create table test_nchar (nchar_col nchar(10), nvarchar_col nvarchar2(10));
  表已創建。
SQL> insert into test_nchar values ('nchar定長', 'nvarchar變長');
已創建 1 行。
  從這里已經可以看出一些不同了,假如按照剛才中文的計算方法,'nvarchar變長'的長度是8+2*2=12已經超過了數據類型定義的大小,可是為什么插入成功了?
還是dump一下看看結果吧。
SQL> select dump(nchar_col, 16) from test_nchar;
DUMP(NCHAR_COL,16)
--------------------------------------------------------------
Typ=96 Len=20: 0,6e,0,63,0,68,0,61,0,72,5b,9a,95,7f,0,20,0,20,0,20
SQL> select dump(nvarchar_col, 16) from test_nchar;
DUMP(NVARCHAR_COL,16)
--------------------------------------------------------------
Typ=1 Len=20: 0,6e,0,76,0,61,0,72,0,63,0,68,0,61,0,72,53,d8,95,7f
  這下就明白了,雖然仍然是采用ascii碼存儲,但是nchar使用的AL16UTF16字符集,編碼長度變為2個字節。這樣中文使用兩個字節,對于可以用一個字節就表示的英文字符,采用了高位補0的方式湊足2位,這樣,對于采用AL16UTF16字符集的nchar類型,無論中文還是英文都用2位字符表示。因此'nvarchar變長'的長度是10,并沒有超過數據類型的限制。


上一篇:如何收集Oracle進程中的sql跟蹤信息

下一篇:關于Oracle 對 Linux 的策略的FAQ

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人在线亚洲欧美| 日韩精品在线电影| 国产精品中文字幕久久久| 91社区国产高清| 欧美激情啊啊啊| 日韩精品在线免费观看视频| 日韩精品在线影院| 亚洲日韩中文字幕| 色在人av网站天堂精品| 久久久极品av| 成人免费高清完整版在线观看| 国产成人在线精品| 亚洲一区av在线播放| 亚洲欧美一区二区精品久久久| 欧美中文在线观看国产| 国产91成人video| 国产精品一区二区久久国产| 欧美精品video| 国产成人在线一区| 久久久久久网址| 国产精品露脸av在线| 亚洲第一页自拍| 亚洲第一视频网| 亚洲欧美国产一本综合首页| 成人h视频在线观看播放| 久久亚洲欧美日韩精品专区| 国产精品电影一区| 97精品久久久| 国产精品久久久久久久7电影| 日韩欧美在线视频免费观看| 国产亚洲精品久久久久动| 国产色综合天天综合网| 亚洲伊人第一页| 国产一区欧美二区三区| 91高清视频在线免费观看| 亚洲第一天堂无码专区| 国产精品wwwwww| 九九热在线精品视频| 国产成人精品久久亚洲高清不卡| 中文综合在线观看| 91chinesevideo永久地址| 国产精品久久久久aaaa九色| 日韩精品久久久久久福利| 国产成+人+综合+亚洲欧洲| 精品露脸国产偷人在视频| 欧美午夜片欧美片在线观看| 国产成人综合精品在线| 成人国产精品色哟哟| 亚洲第一视频网| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲精品久久久久久久久| 欧美大尺度电影在线观看| 日韩在线观看免费av| 欧美国产精品日韩| 国产一区二区三区中文| 久久久久久久久久亚洲| 欧美一区二区三区艳史| 成人国产精品久久久| 国产欧美日韩亚洲精品| 亚洲国产成人在线播放| 亚洲xxx自由成熟| 亚洲精品美女在线观看| 国产主播在线一区| 久久久久久一区二区三区| 欧美激情国内偷拍| 成人激情在线播放| 欧美性生交大片免费| 亚洲视频在线播放| 亚洲天天在线日亚洲洲精| 一区二区三区美女xx视频| 高潮白浆女日韩av免费看| 日韩福利视频在线观看| 亚洲黄色有码视频| 成人黄色免费网站在线观看| 亚洲免费伊人电影在线观看av| 日韩视频精品在线| 91中文字幕在线| 欧美激情视频三区| 亚洲自拍另类欧美丝袜| 国产精品海角社区在线观看| 欧美精品激情视频| 亚洲午夜色婷婷在线| 欧美大成色www永久网站婷| 亚洲va欧美va在线观看| 欧美成年人视频网站| 亚洲国内高清视频| 97精品伊人久久久大香线蕉| 菠萝蜜影院一区二区免费| 亚洲视频在线观看视频| 日韩在线视频观看正片免费网站| 国产精品爱久久久久久久| 国产精品免费一区豆花| 啪一啪鲁一鲁2019在线视频| 欧美日韩国产一区中文午夜| 久久国内精品一国内精品| 欧美在线观看网站| 亚洲国产精品va在线观看黑人| 久久精品男人天堂| 北条麻妃一区二区三区中文字幕| 午夜精品福利在线观看| 成人久久久久久| 国产一区私人高清影院| 97精品久久久中文字幕免费| 亚洲欧美日韩网| 成人妇女免费播放久久久| 成人黄色大片在线免费观看| 欧美大尺度在线观看| 亚洲永久免费观看| 欧美日韩免费观看中文| 亚洲va码欧洲m码| 精品国产91久久久| 精品人伦一区二区三区蜜桃免费| 欧美二区乱c黑人| 欧美性猛交xxxx黑人猛交| 亚洲在线观看视频| 亚洲精品日韩丝袜精品| 欧美在线免费视频| 欧美日韩免费在线观看| 亚洲国产小视频| 欧美wwwxxxx| 亚洲国产成人爱av在线播放| 亚洲无亚洲人成网站77777| 国产美女精品视频免费观看| 亚洲三级 欧美三级| 97国产在线观看| 成人精品aaaa网站| 欧美综合第一页| 国内免费久久久久久久久久久| 亚洲成人激情图| 亚洲男人第一网站| 日韩av综合中文字幕| 美女视频黄免费的亚洲男人天堂| 精品国内产的精品视频在线观看| 狠狠躁夜夜躁人人爽超碰91| 国产精品无码专区在线观看| 亚洲综合日韩中文字幕v在线| 国产日韩av在线| 不卡在线观看电视剧完整版| 亚洲国产欧美一区二区三区久久| 日韩成人在线免费观看| 欧美日韩在线视频观看| 亚洲国产精品悠悠久久琪琪| 国产精品视频一区二区三区四| 久久人人爽人人爽人人片亚洲| 国产欧美一区二区三区久久| 亚洲精品国产品国语在线| 色悠久久久久综合先锋影音下载| 欧美日韩一区二区精品| 亚洲第一网站免费视频| 欧美成人黑人xx视频免费观看| 亚洲第一精品夜夜躁人人躁| 91chinesevideo永久地址| 久久久www成人免费精品| 成人av番号网| 亚洲三级 欧美三级| 日韩高清av一区二区三区| 亚洲人成在线观| 丝袜情趣国产精品| 日韩高清电影免费观看完整| 亚洲国产天堂网精品网站| 国产精品精品视频| 在线性视频日韩欧美| 国产亚洲欧美日韩美女| 国产69精品久久久久久|