oracle的資料類型包括:1、字串類型,char和varchar2,可表達任何字串;2、數字類型,number(m,n),可表達任何數字;3、日期類型, date,存放日期和時間;4、clob類型,存放單字節字串或多位元組字串資料;5、blob類型,存放非結構化的二進位資料;6、rowid類型,存放表中記錄在資料庫中的實體位址;7、其它資料型態。
本文的操作環境:Windows10系統、Oracle 19c版本、dell g3電腦。
Oracle的資料型別有以下幾種:
1、字串型別:char和varchar2,可表達任何字串。
2、數字類型:number(m,n),可表達任何數字,m是數字的總長度,n是小數點後的位數,如果n為0則表示是整數。
3、日期類型:date,存放日期和時間,包括年(yyyy)、月(mm)、日(dd)、小時(hh24)、分(mi)、秒(ss)。
4、clob類型,存放單字節字串或多位元組字串數據,如文字檔、xml檔。
5、blob類型,存放非結構化的二進位數據,如圖片、音訊、視訊、office文件等。
6、rowid類型,存放表中記錄在資料庫中的實體位址。
7、其它資料型態。
一、字串型別
在C/C 語言中用,字串用雙引號包含起來,在Oracle資料庫中,字串用單引號包含起來的,如下:
'www.freecplus.net'
'碼農有道'
'一隻傻傻鳥'
1 、固定長度的字串
固定長度字串用char表示,當存入資料內容的長度不夠時,Oracle會在資料內容後面自動填充空格以達到其固定的長度,例如char(10 )總是包含10位元組資訊。
char欄位最多可以儲存2000位元組的內容。
2、變長度的字串
變長度字串用varchar2表示,與char型別不同,Oracle不會在資料內容後面填入任何內容。
varchar2欄位最多可以儲存4000位元組的內容,從Oracle 12c版本開始,可以儲存32767位元組的內容。
3、char和varchar2的比較
char(10),如果存入'freecplus',在資料庫中將儲存'freecplus ',在最後補了一個空格。
varchar2(10),如果存入'freecplus',在資料庫中將儲存'freecplus',什麼也不會補。
在實際應用中,我們並不希望Oracle為字串後面補空格,那麼是不是可以棄用char型別呢?不是,我們一般用char類型存放固定大小的資料內容,例如身分證號碼,固定是18位的,用char(18)就非常合適,能用varchar2(18)可以存放身分證號碼嗎?當然可以,但是,char(18)的效率比varchar2(18)的效率高很多。
總結一下,如果確定、肯定、一定、保證存入字串的長度是固定不變的,例如性別、身分證號碼、手機號碼,用char類型,否則用varchar2類型,例如姓名、學歷、地址、興趣愛好等,char雖然死板,但效率高。
4、漢字的儲存
每個漢字佔多少位元組要看具體的編碼方式,如UTF-8(1-3位元組)、GB2312(2位元組)、 GBK(2位元組)、GB18030(1、2、4位元組)。
二、數字型別
Oracle用number型別來存放數字,該型別能儲存精度最多達38位,遠高於程式語言中常規的long int和double型別。
number( m,n),m表示總長度,n表示小數位的精度,如果存入的資料的小數位的精度超過了n,則取四捨五入後的值。
例如:number(10,3),10是總長度,3是小數後的位數,如123.456。
如果存入123.4567,實際際將是123.457。
如果存入12345679.899,總長度超出了10,Oracle將提示錯誤。
如果打算存入整數,用number(m)就可以了,m表示可以存入資料的最大位數。
三、日期類型
Oracle採用date類型表示日期和時間,這是一個7位元組的固定寬度的資料類型,有7個屬性,包括:世紀、世紀中哪一年、月份、月中的哪一天、小時、分鐘、秒。
對程式語言來說,日期和時間是用字串來顯示和書寫的,Oracle提供了to_date和to_char兩個函數在date類型和字串類型之間轉換。
例如:
insert into T_GIRL(name,birthday) values('西施',to_date('2000-01-01 01:12:35','yyyy-mm-dd hh24:mi:ss')); select name,to_char(birthday,'yyyy-mm-dd hh24:mi:ss') from T_GIRL where name='西施';
四、clob和blob類型
clob類型,變長的字串大對象,最長可達4GB, clob可以儲存單字節字串或多字節字串數據,clob被認為是一個更大的字串。當資料庫的字元集發生轉換時,clob類型會受到影響。
blob類型,變長的二進位大對象,最長可達4GB,blob主要用於保存帶格式的非結構化數據,如圖片、音訊、視訊、Office文件等。當資料庫的字元集發生轉換時,blob類型不會受到影響,Oracle資料庫不關心存放的是什麼內容。
五、rowid類型
Oracle資料庫中每個表的每行記錄都有一個儲存的實體位置,即表的rowid偽列,採用rowid作為where條件的存取效率最高。
rowid的存取效率雖然是最高的,但是,在實際應用中要謹慎,需要注意兩個問題:
1)rowid存放的是表記錄的物理位置,在數據整理、資料備份和遷移的時候,記錄的實體位置會改變;
2)rowid是Oracle資料庫專有的資料類型,與其它的資料庫不相容。
六、其它資料類型
在在上面的內容中,介紹了Oracle最常用的資料類型,可以滿足99%以上的應用場景。
Oracle提供了22不同的SQL資料型,其它的資料型別不一定實用,但我還是把它們全部列出來,大家了解一下,不必深入研究。二十年來,其它的資料類型我從未使用過。
char:定長字串,會用空格填滿來達到最大長度。非null的char(10)包含10個位元組資訊。 char欄位最多可以儲存2000個位元組資訊。
nchar:包含unicode格式資料的定長字串。 nchar欄位最多可儲存2000位元組的資訊。
varchar2:是varchar的同義詞。這是一個變長字串,與char類型不同,它不會用空格將欄位或變數填入最大長度。 varchar(10)可能包含0~10位元組的信息,最多可儲存4000位元組資訊。從12c起,可以儲存32767位元組資訊。
nvarchar2:包含unicode格式資料的變長字串。最多可儲存4000位元組資訊。從12c起,可以儲存32767位元組資訊。
raw:一種變長二進位資料類型,採用這種資料類型所儲存的資料不會發生字元集轉換。
number:能儲存精度最多高達38位元的數字。這種類型的資料會以變長方式來存儲,長度在0~22位元組。
binary_float:32位元單精度浮點數,可以支援至少6位元精度,佔用磁碟上5個位元組的儲存空間。
binary_double:64位元雙精度浮點數,可以支援至少15位元精度,佔用磁碟上9個位元組的儲存空間。
long:這種類型能儲存最多2GB的字元資料
long raw:long raw類型能儲存多達2GB的二進位資訊
date:這是一個7位元組的定寬日期/時間資料類型,其中包含7個屬性:世紀、世紀中的哪一年、月份、月中的哪一天、小時、分鐘、秒。
timestamp:這是一個7位元組或11位元組的定寬日期/時間資料類型,它包含小數秒。
timestamp with time zone:這是一個13位元組的timestamp,提供了時區支援。
timestamp with local time zone:這是一個7位元組或11位元組的定寬日期/時間資料類型,在資料的插入和讀取時會發生時區轉換。
interval year to month:這是一個5位元組的定寬資料類型,用於儲存一個時段。
interval day to second:這是一個11位元組的定寬資料類型,用來儲存一個時段。將時段儲存為天/小時/分鐘/秒數,還可以有9位小數秒。
blob:這種類型能夠儲存最多4GB的資料。
clob:這種類型能夠儲存最多4GB的資料。當字元集發生轉換時,這種類型會受到影響。
nclob:這種類型能夠儲存最多4GB的資料。當字元集發生轉換時,這種類型會受到影響。
bfile:這種資料類型可以在資料庫列中儲存一個oracle目錄物件和一個檔名,我們可以透過它來讀取這個檔案。
rowid:實際上是資料庫表中行的位址,它有10位元組長。
urowid:是一個通用的rowid,沒有固定的rowid的表。
以上是oracle的資料型別有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!