這篇文章的主要目的是分析建設系統所用的儲存空間,避免對存放裝置的過渡浪費,節省投資。同時也提高對oracle常用資料類型的認識。
介紹的類型如下:
·char
·varchar
·varchar2
·nvarchar
·nvarchar2
·number
·date
char的長度是固定的,比如說,你定義了char(20),即使你你插入abc,不足二十個位元組,資料庫也會在abc後面自動加上17個空格,以 補足二十個位元組;char是區分中英文的,中文在char中佔兩個位元組,而英文佔一個,所以char(20)你只能存20個字母或10個漢字;char適 用於長度比較固定的,一般不含中文的情況;CHAR的效率比VARCHAR2的效率稍高。
目前VARCHAR是VARCHAR2的同義字。工業標準的VARCHAR類型可以儲存Null 字元串,但是oracle自己開發了一個資料類型 VARCHAR2,這個類型不是一個標準的VARCHAR,它將在資料庫中varchar列可以儲存Null 字元串的特性改為儲存NULL值。如果你想有向後兼 容的能力,Oracle建議使用VARCHAR2而不是VARCHAR。
varchar和varchar2是長度不固定的,比如說,你定義了varchar(20),當你插入abc,則在資料庫中只佔3個位元組。中文佔兩個位元組。
varchar和varchar2最多儲存4000位元組。
nvarchar和nvarchar2是長度不固定的;nvarchar不區分中英文,比如說:你定義了nvarchar(20),你可以存入20 個英文字母/漢字或中英文組合,這個20定義的是字元數而不是位元組數;nvarchar2基本上等同於nvarchar,不同在於nvarchar2中存 的英文字母也佔兩個位元組;nvarchar/nvarchar2適用於存放中文。
NUMBER最多佔用22個位元組,最大可以儲存38個十進位位。
Number預設情況下,精度為38位,取值範圍1~38之間。它實際上是磁碟上的一個變長類型,會佔用0~22 位元組的儲存空間。 但定義的一個Number型欄位到底要佔用多少位元組呢?從網上找到了如下公式。
其實有公式可以計算:
number(p,s)佔用得空間為:
length = floor((p+1)/2) + 1
備忘:如果該數值為負數,需要再加一個位元組。
----------------
例如:NUMBER(14,4)的類型數值,儲存空間為
select floor((14+1)/2) + 1 from dual
結果輸出為:8
DATE類型在oracle10g中佔用7個位元組。
在粗數量級估計一張表每條記錄佔用多少空間時,可以參考上述的規則,查詢資料字典也是一種途徑。
SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME='';
在查詢結果中,有一列叫DATA_LENGTH,記錄了佔用最大位元組數。