ORACLE資料庫欄位型別說明
型別 | 含義 | 儲存描述 | 備註 |
---|---|---|---|
CHAR | 固定長度字串 | 最大長度2000bytes | |
VARCHAR2 | 可變長度的字串, | 最大長度4000bytes | 可做索引的最大長度749 |
NCHAR | 根據字符集而定的固定長度字串 | 最大長度2000bytes | |
NVARCHAR2 | 根據字符集而定的可變長度字串 | 最大長度4000bytes | |
DATE | 日期(日-月-年) | DD-MM-YY(HH-MI-SS),經過嚴格測試,無千蟲問題 | |
TIMESTAMP | 日期(日-月-年) | DD-MM-YY(HH-MI-SS:FF3),經過嚴格測試,無千蟲問題 | 與DATE相比較,TIMESTAMP有小數位秒資訊 |
LONG | 超長字串 | 最大長度2G,足夠儲存大部頭著作 | |
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
資料庫大概有26
個欄位型別,大體分為六類,分別是字串型別、數字資料型別、日期時間資料型別、
=大型物件(LOB
)資料型別、RAW
和LONG RAW
資料型別、ROWID
和UROWID
資料型別。**
當然Oracle
還提供使用者自定義的資料型別,但在我這篇不做討論。
字串型別
Char
char資料型別儲存固定長度的字元值。一個CHAR
資料型別可以包括1到2000個字元。如果對CHAR
沒有明確地說明長度,
它的預設長度則設定為1。 如果對某個CHAR型別變數賦值,其長度小於規定的長度,那麼Oracle
自動用空格填充。
注意:如果給了一個比固定長度更長的值,其尾部帶有空格,則空格會被刪除到固定的長度。如果值太大Oracle會返回一個錯誤
Varchar
用於儲存變長的字串資料。其中最大位元組長度由(size)指定。每行長度可變,最大長度為每行4000位元組。
設定長度(size)前需考慮字符集為單位元組或多位元組。
注意:varchar
是被廢棄的型別,oracle目前都推薦使用varchar2
。雖然varchar
也可以用,但不確保未來的版本是否還支援
Varchar2
用於儲存變長的字串資料。其中最大位元組長度由(size)指定。每行長度可變,最大長度為每行4000位元組。
設定長度(size)前需考慮字符集為單位元組或多位元組。由於VARCHAR2資料型別只儲存為該列所賦的字元(不加空格),所以VARCHAR2
需要的儲存空間比CHAR
資料型別要小。
區別:varchar2
把所有字元都佔兩位元組處理(一般情況下),varchar
只對漢字和全形等字元佔兩位元組,數字,英文字元等都是一個位元組;VARCHAR2
把空串等同於null處理,而varchar仍按照空串處理;大部分情況下建議使用varchar2
型別,可以保證更好的相容性。
Nchar
Unicode
資料型別,根據字符集而定的固定長度字串,最大長度2000bytes。
Nvarchar2
Unicode
資料型別,根據字符集而定的可變長度字串,最大長度4000bytes。
Long
可變長字元列,最大長度限制為2GB,用於不需要作字串搜尋的長串資料。
說明:此型別是一個遺留下來的而且將來不會被支援的資料型別,逐漸被BLOB,CLOB,NCLOB等大的資料型別所取代。
數字型別
Number
NUMBER
資料型別精度可以高達38
位,它有兩個限定符,如:column NUMBER(precision,scale)
。precision
表示數字中的有效位。
如果沒有指定precision
的話,Oracle
將使用38
作為精度。scale
表示小數點右邊的位數,scale
預設設定為0。
如果把scale
設成負數,Oracle
將把該數字取捨到小數點左邊的指定位數。
Decimal
Oracle
只是在語法上支援decimal
型別,但是在底層實際上它就是number
型別,支援decimal
型別是為了能把資料從Oracle
資料庫移到其他資料庫中。
Float
FLOAT
型別也是NUMBER
的子型別。其格式Float(n)
,數 n
指示位的精度,可以儲存的值的數目。N
值的範圍可以從 1 到 126。
若要從二進位制轉換為十進位制的精度,請將n 乘以 0.30103。要從十進位制轉換為二進位制的精度,請用 3.32193 乘小數精度。
126 位二進位制精度的最大值是大約相當於 38 位小數精度。
BINARY_FLOAT
BINARY_FLOAT
是一種 32 位,單精度浮點數字資料型別。每個 BINARY_FLOAT
值需要5 位元組儲存空間,其中 1 位元組用於儲存資料值的長度。支援 NUMBER
資料型別所提供的基本功能。但採用二進位制精度,而NUMBER
採用十進位制精度。因此能夠提供更快的數學運算速度,且能減少佔用的儲存空間。
BINARY_DOUBLE
BINARY_DOUBLE
是一種 64 位,雙精度浮點數字資料型別。每個 BINARY_DOUBLE
值需要9 位元組儲存空間,
其中 1 位元組用於儲存資料值的長度。支援 NUMBER
資料型別所提供的基本功能。但採用二進位制精度,而NUMBER 採用十進位制精度。
因此能夠提供更快的數學運算速度,且能減少佔用的儲存空間。
日期資料型別
Date
ORACLE
最常用的日期型別,它可以儲存日期和時間,常用日期處理都可以採用這種型別。 DATE
表示的日期範圍可以是公元前4712年1月1日至公元9999年12月31日。 date
型別在資料庫中的儲存固定為7個位元組, 第1位元組:世紀+100、 第2位元組:年、第3位元組:月、第4位元組:天、
第5位元組:小時+1、第6位元組:分+1、第7位元組:秒+1。
Timestamp
ORACLE
常用的日期型別,它與date
的區別是不僅可以儲存日期和時間,還能儲存小數秒,小數位數可以指定為0-9,預設為6位,所以最高精度 可以到ns(納秒),資料庫內部用7或者11個位元組儲存,如果精度為0,則用7位元組儲存,與date型別功能相同,如果精度大於0則用11位元組儲存。第1位元組:世紀+100、第2位元組:年、第3位元組:月、第4位元組:天、 第5位元組:小時+1、第6位元組:分+1、第7位元組:秒+1、 第8-11位元組:納秒,採用4個位元組儲存,內部運算型別為整形
注:TIMESTAMP日期型別如果與數值進行加減運算會自動轉換為DATE型,也就是說小數秒會自動去除。
TIMESTAMP WITH TIME ZONE
對TIMESTAMP
進行了擴充套件,用於儲存時區。時間戳以及時區位移值,其中fractional_seconds_precision
是數字在第二日期時間欄位的
小數部分數字的所有值。可接受的值是0到9。預設是6。預設格式是確定明確的NLS_DATE_FORMAT
引數或隱式的NLS_TERRITORY
引數。
大小固定為13位元組。此資料型別包含日期時間欄位YEAR
,MONTH
,日,小時,分鐘,秒TIMEZONE_HOUR
和TIMEZONE_MINUTE
。
它有一個明確的分數秒和時區。
TIMESTAMP WITH LOCAL TIME ZONE
所有的TIMESTAMP WITH TIME ZONE
值,但下列情況除外:資料標準化資料庫的時區時,儲存在資料庫中。當資料被檢索,
使用者可以看到在會話時區中的資料。預設格式是確定明確的NLS_DATE_FORMAT
引數或隱式的NLS_TERRITORY
引數。
的大小不同的7至11個位元組,取決於精度。
INTERVAL YEAR TO MONTH
儲存期間年數和月的時間,其中year_precision
是數字的年份日期時間欄位的數量。可接受的值是0到9。預設是2。大小固定為5個位元組。
INTERVAL DAY TO SECOND
其格式為:INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds)],是儲存一段時間以天,小時,分鐘和秒,
其中day_precision是數字在DAY日期時間欄位的最大數量。可接受的值是0到9。預設是2。fractional_seconds_precision是數字中的
第二個欄位的小數部分的數量。可接受的值是0到9。預設是6。大小固定為11個位元組。
INTERVAL YEAR TO MONTH
Oracle
語法:INTERVAL YEAR [(year_precision )] TO MONTH
,用來表示一段時間差,
只精確到年和月. year_precision
是數字年的時間段,接受的值為0到9。預設值是2
。大小固定為5個位元組。
大型物件(LOB)資料型別
Clob
最大4G,儲存單位元組字元型資料。適用於儲存超長文字。
Nclob
最大4G,儲存多位元組國家字元型資料。適用於儲存超長文字。
Blob
最大4G,儲存二進位制資料。適用於儲存影象、視訊、音訊等。
BFile
最大長度是4GB,在資料庫外部儲存的大型二進位制物件檔案,最大長度是4GB。這種外部的LOB型別,通過資料庫記錄變化情況,但是資料的具體儲存是在資料庫外部進行的。 Oracle 可以讀取、查詢BFILE
,但是不能寫入,不參與事務。
RAW和LONG RAW資料型別
RAW
raw(n)格式,其中n=1 to 2000,可變長二進位制資料,在具體定義欄位的時候必須指明最大長度n,Oracle
用這種格式來儲存較小的圖形檔案或帶格式的文字檔案,如Miceosoft Word文件。raw是一種較老的資料型別,將來會逐漸被BLOB、CLOB、NCLOB
等大的物件資料型別所取代。
LONG RAW
最大長度是2GB。可變長二進位制資料,最大長度是2GB。Oracle 用這種格式來儲存較大的圖形檔案或帶格式的文字檔案,
如Miceosoft Word文件,以及音訊、視訊等非文字檔案。在同一張表中不能同時有long型別和long raw型別,
long raw也是一種較老的資料型別,將來會逐漸被BLOB、CLOB、NCLOB
等大的物件資料型別所取代。
ROWID和UROWID資料型別
Rowid
ROWID
為該錶行的唯一標識,是一個偽列,可以用在SELECT
中,但不可以用INSERT
, UPDATE
來修改該值。
ROWID列,Oracle使用ROWID
列來建立內部索引。你可以引用ROWID的值,但ROWID並不存放在資料庫中,你可以建立一個表包含ROWID資料型別。但Oracle不保證該值是合法的rowids。使用者必須確保該rowid值是真實合法的。
Urowid
UROWID
支援邏輯和物理的rowids
,列UROWID
型別可以儲存各種rowids, 從8.1以後的Oracle才有UROWID型別,
它也可以用來儲存以前的ROWID型別資料資訊。
特殊資料型別
Xmltype
XMLType
是Oracle從9i開始特有的資料型別,是一個繼承了Blob的強大存在,可以用來儲存xml並提供了相當多的操作函式,
用來直接讀取xml文件和管理節點。理論上可以儲存2G大小的資料。作為XML
資料的特殊儲存型別。 Xmltype
提供了適合的儲存、檢索和操作的支援。
Xmlindex
XMLIndex
索引可用於 SQL/XML
函式 XMLExists()
、XMLTable()
和 XMLQuery()
,而且它在查詢的任何部分都有效;
它並不限於用在 WHERE 子句中。而您可能用於 XML 資料的其他任何索引都無法做到這一點。 XMLIndex
因此可提高對 SELECT 列表資料和 FROM 列表資料的訪問速度,對 XML 片段提取尤為有用。基於函式的索引和 CTXXPath
索引。
您無需預先了解將在查詢中使用的XPath
表示式。XMLIndex
完全是通用的,而基於函式的索引則不同。可將 XMLIndex
索引用於基於 XML模式或非基於模式的資料。它可用於二進位制 XML 和非結構化儲存模型。B 樹索引僅適用於以物件關係方式儲存(結構化儲存)的基於模式的資料;它對於儲存在二進位制XML 或CLOB 例項中的基於 XML 模式的資料效率低下。可使用 XMLIndex
索引通過 XPath
表示式進行搜尋,這些表示式的目標是集合(即文件中出現多次的節點)。而函式索引則不然。