標籤:使用 width height 存在 處理 oracl 填充 預設 瞭解
Oracle中2000個byte,並不是2000個字元的意思,1個字元在Oracle中可能是1個byte到4個byte不等,需看資料庫字元集的設定了。
對GBK字元集而言,ASCII碼中128個字元使用1個位元組進行儲存,其它字元使用雙位元組儲存;對UTF8字元集而言,ASCII碼中128個字元使用1個位元組進行儲存,其它採用兩個或三個位元組進行儲存,四個位元組儲存的是極少使用字元;
資料庫中有一個參數NLS_LENGTH_SEMANTICS,這個參數有兩個取值CHAR和BYTE。當為CHAR時字元類型的長度是按字元個數來計算,而不是按BYTE來計算,這在使用變長字元集(AL32UTF8)的情況下非常有用,因為一個字元所佔用的位元組數是不定的,就給我們準確估計欄位長度(BYTE)帶來不便。
1、CHAR。
CHAR儲存定長資料很方便,CHAR欄位上的索引效率級高,比如定義char(10),那麼不論你儲存的資料是否達到了10個位元組,都要佔去10個位元組的空間,不足的自動用空格填充。
2、VARCHAR
VARCHAR儲存變長資料,但儲存效率沒有CHAR高。如果一個欄位可能的值是不固定長度的,我們只知道它不可能超過10個字元,把它定義為 VARCHAR(10)是最合算的。VARCHAR類型的實際長度是它的值的實際長度+1。為什麼“+1”呢?這一個位元組用於儲存實際使用了多大的長度。從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際情況找到權衡點。
3、TEXT
TEXT儲存可變長度的非Unicode資料,最大長度為2^31-1(2,147,483,647)個字元。
4、NCHAR、NVARCHAR、NTEXT
這三種從名字上看比前面三種多了個“N”。它表示儲存的是Unicode資料類型的字元。我們知道字元中,英文字元只需要一個位元組儲存就足夠了,但漢字眾多,需要兩個位元組儲存,英文與漢字同時存在時容易造成混亂,Unicode字元集就是為瞭解決字元集這種不相容的問題而產生的,它所有的字元都用兩個位元組表示,即英文字元也是用兩個位元組表示。
5、字元集與國家字元集
1>字元集
(1)用來儲存CHAR, VARCHAR2, CLOB, LONG等類型資料
(2)用來標示諸如表名、列名以及PL/SQL變數等
(3)用來儲存SQL和PL/SQL程式單元等
2>國家字元集
(1)用以儲存NCHAR, NVARCHAR2, NCLOB等類型資料
(2)國家字元集實質上是為oracle選擇的附加字元集,主要作用是為了增強oracle的字 符處理能力,因為NCHAR資料類型可以提供對亞洲使用定長多位元組編碼的支援,而資料 庫字元集則不能。國家字元集在oracle9i中進行了重新定義,只能在unicode編碼中的 AF16UTF16和UTF8中選擇,預設值是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),精度更高 |
|
Oracle欄位類型及儲存(一)