本文參考了Oracle官方文檔的內(nèi)容,如果需要詳細的資料,直接查看官方文檔是更好的方法。
字符數(shù)據(jù)類型
CHAR類型
CHAR類型存儲定長的字符串,當指定CHAR類型的時候,必須指定一個1-2000字節(jié)之間的值作為CHAR的寬度(以字節(jié)或字符為單位)。默認為1字節(jié)。Oracle保證:
- 當插入和更新一列的時候,CHAR類型的列具有定長的寬度。
- 當給定一個較小的值時,值會由空白字符填充至定長長度。
- 當一個值太大時,Oracle數(shù)據(jù)庫會返回錯誤。
VHARCHAR2和VARCHAR類型
VARCHAR2類型存儲變長的字符串。當創(chuàng)建VARCHAR2類型的列時,需要制定一個1-4000字節(jié)之間的值作為最大長度。對于每一行,Oracle數(shù)據(jù)庫會將VARCHAR類型存儲成邊長的域。如果一個值超過了最大長度,Oracle數(shù)據(jù)庫就會返回錯誤。使用VARCHAR2和VARCHAR類型可以節(jié)省表的空間。
VARCHAR數(shù)據(jù)類型
VARCHAR數(shù)據(jù)類型是VARCHAR2的同義詞。雖然現(xiàn)在VARCHAR2和VARCHAR是同義詞,但是將來可能會將VARCHAR更改為單獨的數(shù)據(jù)類型。因此在使用時候最好只是用VARCHAR2。
NVARCHAR和NVARCHAR2類型
這兩種數(shù)據(jù)類型是Unicode數(shù)據(jù)類型,用來保存Unicode字符串。它們的字符集只能是AL16UTF16或者UTF8兩種,并且在數(shù)據(jù)庫創(chuàng)建時指定國家字符集時指定。
NCHAR的最大寬度是2000字節(jié),因此最多可以存儲2000個字符。實際數(shù)據(jù)受2000字節(jié)的大小限制。這兩個大小約束條件在運行時必須同時滿足。
NVARCHAR2的最大寬度是4000字節(jié),因此最多可以存儲4000個字符。實際數(shù)據(jù)受4000字節(jié)的大小限制。這兩個大小約束條件在運行時必須同時滿足。
LOB類型
LOB是大對象(Large Object),用于存儲比較大的數(shù)據(jù),有CLOB、NCLOB、BLOB三種,將在后面說明。
LONG類型
LONG類型可以存儲最多2的32次方-1字節(jié)的變長字符串。這個類型存在的意義僅僅是為了向后兼容,因此不要在自己的數(shù)據(jù)庫中使用這個類型。如果有存儲大字符串的需求,使用CLOB和NCLOB類型。
數(shù)值類型
數(shù)值類型可以保存正負定點數(shù)和浮點數(shù)、零、無窮大和未定義的操作結(jié)果(例如非數(shù)字NaN)。
NUMBER類型
NUMBER類型用于存儲定點數(shù)和浮點數(shù),可以保存幾乎任意大小(38位精度)的數(shù)值并在不同版本的Oracle數(shù)據(jù)庫中通用。
以下數(shù)值可以保存在NUMBER類型中:
- 從 1 x 10E-130 到 9.99...9 x 10E125 范圍內(nèi)帶有38位有效數(shù)字的正數(shù)
- 從 -1 x 10E130 到 9.99...99 x 10E125范圍內(nèi)38位有效數(shù)字的負數(shù)
- 零
- 正負無窮大(僅當從Oracle數(shù)據(jù)庫版本5中導入時生成)
你可以選擇指定NUMBER類型精度和數(shù)值范圍:
column_name NUMBER (precision, scale)
如果精度沒有指定,那么數(shù)據(jù)庫會按照給定的值保存數(shù)值。如果數(shù)值范圍沒有指定,數(shù)值范圍就是0。Oracle保證精度小于等于38位的數(shù)值的可移植性。可以將精度指定為*
,這種情況下精度是38位,數(shù)值范圍仍然是給定的。如下:
column_name NUMBER (*, scale)
下面的表格展示了數(shù)值范圍是如何影響數(shù)據(jù)存儲的:
輸入 | 指定為 | 存儲為 |
---|---|---|
7,456,123.89 | NUMBER | 7456123.89 |
7,456,123.89 | NUMBER(*,1) | 7456123.9 |
7,456,123.89 | NUMBER(9) | 7456124 |
7,456,123.89 | NUMBER(9,2) | 7456123.89 |
7,456,123.89 | NUMBER(9,1) | 7456123.9 |
7,456,123.89 | NUMBER(6) | (not accepted, exceeds precision) |
7,456,123.89 | NUMBER(7,-2) | 7456100 |
浮點數(shù)類型
Oracle數(shù)據(jù)庫專門為浮點數(shù)提供了兩種數(shù)據(jù)類型,BINARY_FLOAT和BINARY_DOUBLE。它們支持所有NUMBER提供的基本功能。并且由于NUMBER使用十進制精度,BINARY_FLOAT和BINARY_DOUBLE使用二進制精度,這為它們提供了更快的數(shù)值計算速度并常常減少了存儲需求。
BINARY_FLOAT和BINARY_DOUBLE是近似的數(shù)值類型。它們儲存了十進制數(shù)值的近似表示,而不是精確表示。例如,十進制數(shù)0.1不能精確的表示成BINARY_FLOAT或者BINARY_DOUBLE。它們經(jīng)常用來進行科學計算,在行為上和Java以及XML Schema中的FLOAT和DOUBLE相似。
BINARY_FLOAT
BINARY_FLOAT是32位單精度浮點數(shù)類型,需要占用5個字節(jié)的存儲空間,包括一個長度字節(jié)。
BINARY_DOUBLE
BINARY_DOUBLE是64位雙精度浮點數(shù)類型,需要占用9個字節(jié)的存儲空間,包括一個長度字節(jié)。
值 | BINARY_FLOAT | BINARY_DOUBLE |
---|---|---|
最大正值 | 3.40282E+38F | 1.79769313486231E+308 |
最小正值 | 1.17549E-38F | 2.22507485850720E-308 |
日期和時間類型
日期時間類型包括DATE
,TIMESTAMP
,TIMESTAMP WITH TIME ZONE
,TIMESTAMP WITH LOCAL TIME ZONE
。時間間隔類型包括INTERVAL YEAR TO MONTH
和INTERVAL DAY TO SECOND
兩種。
DATE類型
DATE類型存儲了日期和時間信息。對于每個DATE類型的值,Oracle存儲了以下信息:世紀、年、月、日、時、分、秒。可以為DATE類型的值指定字面值,也可以使用TO_DATE函數(shù)將一個字符或者數(shù)值轉(zhuǎn)換成DATE類型。
TIMESTAMP類型
TIMESTAMP
數(shù)據(jù)類型是DATE類型的擴展。它存儲了年、月、日,加上時、分、秒。這個數(shù)據(jù)類型在儲存精確的時間值時很有用。
大對象類型
大對象類型(Large Objects)包括BLOB、 CLOB、 NCLOB和BFILE。它們允許你存儲和可操作大型非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、文本、視頻、聲音等等。
BLOB類型
BLOB類型在數(shù)據(jù)庫中存儲非結(jié)構(gòu)化的二進制數(shù)據(jù),最多可以存儲128T的二進制數(shù)據(jù)。
CLOB和NCLOB類型
CLOB和NCLOB類型可以儲存最多128T的字符數(shù)據(jù)。CLOB儲存數(shù)據(jù)庫字符集的數(shù)據(jù),而NCLOB存儲Unicode字符集數(shù)據(jù)。
BFILE類型
BFILE類型存儲在數(shù)據(jù)庫之外的非結(jié)構(gòu)化的二進制數(shù)據(jù)。BFILE數(shù)據(jù)存儲了指向外部文件的文件定位符。可以存儲的BFILE數(shù)量手操作系統(tǒng)的限制。另外,BFILE是只讀的。
最后本來想寫全的,發(fā)現(xiàn)Oracle官方文檔說的實在是太多了。實在是寫不動了。就把這最常用的這些寫下來吧。寫著寫著發(fā)現(xiàn)變成了官方文檔的翻譯。希望這部分還沒有翻譯過,不然我又造了一次重復輪子。