oracle資料類型的學習筆記

來源:互聯網
上載者:User


一、資料類型

1、char
char是一個定長字串,會用空格填充來達到其最大長度。如果該列沒有插入資料為null,插入資料沒有到定義的長度,用空格填充。

2、nchar
這是一個包含unicode格式資料的定長字串。

3、varchar2
目前這也是varchar的同義字。這是一個變長字串,與char類型不同,它不會用空格填充至最大長度。

4、nvarchar2
這是一個包含unicode格式資料的變長字串。

5、raw
這是一種變長位元據類型,這說明採用這種資料類型儲存的資料不會發生字元集轉換。可以把它看作由資料庫儲存的資訊的二進位位元組串。

使用類似於char,儲存的是char的二進位值。(我沒用過)

6、number
這種資料類型能儲存精度最多達38位的數字。oracle的number類型精度很高,遠遠高於許多程式設計語言中常規的float和double。

7、float(binary_float)
這是oracle 10g Release 1及以後版本中才有的一種新類型。它是一個32位單精確度浮點數,可以支援至少6位精度,佔用磁碟上5位元組的儲存空間。

8、long
這種類型能儲存最多2G的字元資料,long類型只是為了保證向後相容性,所以強烈建議新應用中不要使用long類型,而且在現有的應用中也要儘可能將long類型轉換為clob類型。

9、long raw
long raw類型能儲存多達2GB的二進位資訊。由於和long同樣的原因,建議使用blob類型替代。

10、date
這是一個7位元組的定寬日期/時間資料類型。其中總共包含7個屬性,包括:世紀、世紀中哪一年、月份、月中的哪一天、小時、分鐘和秒。

create table temp (x date);
insert into temp values (sysdate);

因為x是date類型,在用戶端查詢出來是自動做過轉換的:

select * from temp;
X
------------------
28-APR-15

所以不能直接匹配:

select * from temp where x = '2015-04-28 21:45:25';(錯)

需要把date類型轉換後再匹配:

select * from temp where to_char(x,'yyyy-mm-dd hh24:mi:ss') = '2015-04-28 21:45:25';

注意:date類型只精確到秒。

11、timestamp
這是一個7位元組或12位元組的定寬日期/時間資料類型。它與date資料類型不同,因為timestamp可以包含小數秒(fractional second);帶小數秒的timestamp在小數點右邊最多可以保留9位。

create table temp (stamp timestamp);
insert into temp values (sysdate);
insert into temp values (systimestamp);
select * from temp;

STAMP
-------------------------------
28-APR-15 10.26.35.000000 PM
28-APR-15 10.26.35.564230 PM

可以看到timestamp類型,用systate插入的資料,秒後面6位小數為0。用systimestamp插入的資料,秒後面多6位小數。

timestamp類型時間精度非常高。

12、timestamp with time zone
與前一種類型類似,這是一個12位元組的定寬timestamp,不過它還提供了時區(time zone)支援。資料中會隨timestamp儲存有關時區的額外資訊,所以原先插入的time zone會與資料一同保留。

13、timestamp with local time zone
與timestamp類似,這是一種7位元組或12位元組的定寬日期/時間資料類型;不過,這種類型對時區敏感(time zone sensitive)。

14、interval year to month
這是一個5位元組的定寬資料類型,用於儲存一個時間段,這個類型將時段儲存為年數和月數。

15、interval day to second
這是一個12位元組的定寬資料類型,用於儲存一個時段,這個類型將時段儲存為天/小時/分鐘/秒數,還可以有最多9位的小數秒。

16、bfile
這種資料類型允許在資料庫列中儲存一個oracle目錄對象(作業系統目錄的一個指標)和一個檔案名稱,並讀取這個檔案。

17、blob
在oracle 9i及以前的版本中,這種資料類型允許儲存最多4GB的資料,在oracle 10g及以後的版本中允許儲存最多(4GB)×(資料庫塊大小)位元組的資料。blob包含不需要進行字元集轉換的“二進位”資料,如果要儲存試算表、文書處理文檔、影像檔等就很適合採用這種資料類型。

PS:一般不會使用blob類型直接儲存圖片、文檔的位元據,往往是儲存它在磁碟上的路徑。

18、clob
在oracle 9i及以前的版本中,這種資料類型允許儲存最多4GB的資料,在oracle 10g及以後的版本中允許儲存最多(4GB)×(資料庫塊大小)位元組的資料。clob包含要進行字元集轉換的資訊。這種資料類型很適合儲存純文字資訊。

19、nclob
在oracle 9i及以前的版本中,這種資料類型允許儲存最多4GB的資料,在oracle 10g及以後的版本中允許儲存最多(4GB)×(資料庫塊大小)位元組的資料。nclob儲存用資料庫國家字元集編碼的資訊,而且像clob一樣,這些資訊要進行字元集轉換。

20、rowid
rowid實際上是資料庫中一行的12位元組地址。rowid中編碼有足夠的資訊,足以在磁碟上定位這一行,以及標識rowid指向的對象(表等)。

21、urowid
urowid是一個通用rowid,用於表(如IOT和通過異構資料庫網關訪問的沒有固定rowid的表)。urowid是行主索引值的一種表示,因此,取決於所指向的對象,urowid的大小會有所變化。

二、oracle映射資料

numeric(p,s):完全映射至number(p,s)。如果p未指定,則預設為38。

decimal(p,s)或dec(p,s):完全映射至number(p,s)。如果p未指定,則預設為38。

integer或int:完全映射至number(38)類型。

smallint:完全映射至number(38)類型。

float(b):映射至number類型。

double precision:映射至number類型。

real:映射至number類型。

其實都是映射到number類型上去。

小結:
常用的資料類型不多,有char、varchar(2)、number、date、timestamp,好像沒了。

char和varchar(2)之間,建議只用varchar(2)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.