2012-02-16 37 views
3

因此,使用VARCHAR2優於VARCHAR的優點主要在於VARCHAR2根據數據庫的長度佔用可變大小的空間;當插入的列值爲空時,這會特別有效,因爲在這種情況下幾乎沒有空間被佔用。因此,出於同樣的原因,數據的數據類型是否具有相同的行爲方式,以便當插入的數字爲空時,數據庫中沒有空間浪費?Oracle中用於數字的可變大小數據類型

+3

'VARCHAR2'和'VARCHAR'完全相同,沒有區別。你可能指的是'VARCHAR2'與'CHAR'的區別嗎? – 2012-02-16 10:00:36

+0

「空間便宜」不是;如果您即將接近空間大小的末端,您可以添加到該框中,刪除未使用的表格和重建表格等將爲您節省的遠遠超過使用數字數據類型。 – Ben 2012-02-16 10:17:30

+0

@a_horse_with_no_name糾正了我的錯誤,但我認爲VARCHAR2和VARCHAR是不同的,儘管它們曾經是相同的。 – 2012-02-16 11:12:44

回答

4

是的,存在可變長度數字數據類型,它被稱爲NUMBER

Oracle使用精度所需的最小空間(scale需要一個字節)分別存儲精度(有效數字)和標度。

NUMBER(x,y)是NUMBER的子類型,它們的存儲方式與常規NUMBER相同,只是有額外的約束。

AFAIK,沒有等同於數字的CHAR。

你可以看到Oracle如何將數據存儲在內部與DUMP功能:

SQL> select dump(1), dump(12345), dump(123456789) from dual; 

DUMP(1)   DUMP(12345)    DUMP(123456789) 
------------------ ------------------------ ------------------------------ 
Typ=2 Len=2: 193,2 Typ=2 Len=4: 195,2,24,46 Typ=2 Len=6: 197,2,24,46,68,90 

正如你可以看到精確的數據長度增加。

+0

這部分解決了這個問題,但這裏有個想法,如果我在表T中有一個NUMBER類型的可爲空的列A,那麼對於任何記錄在列A中爲空的表T中,數據庫是否還以某種方式將空間分配給該列作爲準佔位符? – 2012-02-16 11:07:41

+1

NULL值在具有值的最後一列之前每列需要一個字節。最後的NULL列不會被存儲並取0字節。 – 2012-02-16 12:44:33