2012-02-16 118 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