Oracle字段類型及存儲(一)


       Oracle2000byte,並不是2000個字符的意思,1個字符在Oracle中可能是1byte4byte不等,需看數據庫字符集的設置了。

       GBK字符集而言,ASCII碼中128個字符使用1個字節進行存儲,其它字符使用雙字節存儲;對UTF8字符集而言,ASCII碼中128個字符使用1個字節進行存儲,其它采用兩個或三個字節進行存儲,四個字節存儲的是極少使用字符;

       數據庫中有一個參數NLS_LENGTH_SEMANTICS這個參數有兩個取值CHARBYTE。當為CHAR時字符類型的長度是按字符個數來計算,而不是按BYTE來計算,這在使用變長字符集(AL32UTF8)的情況下非常有用,因為一個字符所占用的字節數是不定的,就給我們准確估計字段長度(BYTE)帶來不便。

1CHAR

      CHAR存儲定長數據很方便,CHAR字段上的索引效率級高,比如定義char(10),那么不論你存儲的數據是否達到了10個字節,都要占去10個字節的空間,不足的自動用空格填充。

2VARCHAR

      VARCHAR存儲變長數據,但存儲效率沒有CHAR高。如果一個字段可能的值是不固定長度的,我們只知道它不可能超過10個字符,把它定義為 VARCHAR(10)是最合算的。VARCHAR類型的實際長度是它的值的實際長度+1。為什么“+1”呢?這一個字節用於保存實際使用了多大的長度。從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際情況找到權衡點。

3TEXT

      TEXT存儲可變長度的非Unicode數據,最大長度為2^31-1(2,147,483,647)個字符。

4NCHARNVARCHARNTEXT

      這三種從名字上看比前面三種多了個“N”。它表示存儲的Unicode數據類型的字符。我們知道字符中,英文字符只需要一個字節存儲就足夠了,但漢字眾多,需要兩個字節存儲,英文與漢字同時存在時容易造成混亂,Unicode字符集就是為了解決字符集這種不兼容的問題而產生的,它所有的字符都用兩個字節表示,即英文字符也是用兩個字節表示。

5字符集與國家字符集

       1>字符集
             (1)
用來存儲CHAR, VARCHAR2, CLOB, LONG等類型數據
             (2)
用來標示諸如表名、列名以及PL/SQL變量等
             (3)
用來存儲SQLPL/SQL程序單元等

       2>國家字符集

              (1)用以存儲NCHAR, NVARCHAR2, NCLOB等類型數據
             (2)
國家字符集實質上是為oracle選擇的附加字符集,主要作用是為了增強oracle的字    符處理能力,因為NCHAR數據類型可以提供對亞洲使用定長多字節編碼的支持,而數據 庫字符集則不能。國家字符集在oracle9i中進行了重新定義,只能在unicode編碼中的     AF16UTF16UTF8中選擇,默認值是AF16UTF16

 

 

字段類型 中文說明 限制條件 其它說明
CHAR 固定長度字符串 最大長度2000bytes
VARCHAR2 可變長度的字符串 最大長度4000bytes 可做索引的最大長度749
NCHAR 根據字符集而定的固定長度字符串 最大長度2000bytes
NVARCHAR2 根據字符集而定的可變長度字符串 最大長度4000bytes
DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 經過嚴格測試,無千蟲問題
LONG 超長字符串 最大長度2G(231-1) 足夠存儲大部頭著作
RAW 固定長度的二進制數據 最大長度2000bytes 可存放多媒體圖象聲音等
LONG RAW 可變長度的二進制數據 最大長度2G 同上
BLOB 二進制數據 最大長度4G
CLOB 字符數據 最大長度4G
NCLOB 根據字符集而定的字符數據 最大長度4G
BFILE 存放在數據庫外的二進制數據 最大長度4G
ROWID 數據表中記錄的唯一行號 10bytes ********.****.****格式,*為0或1
NROWID 二進制數據表中記錄的唯一行號 最大長度4000bytes
NUMBER(P S) 數字類型 P為整數位,S為小數位
DECIMAL(P S) 數字類型 P為整數位,S為小數位
INTEGER 整數類型 小的整數
FLOAT 浮點數類型 NUMBER(38),雙精度
REAL 實數類型 NUMBER(63),精度更高

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM