一、資料類型
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)。