Oracle 11g:我可以创建一个只存储1个字节的数字列吗?

时间:2012-02-17 19:19:26

标签: oracle numbers oracle11g byte

我需要一个数字列作为我正在处理的事情的指标,但我不希望每个记录占用超过一个字节。如果我使用NUMBER(1),这是否满足我的要求?

1 个答案:

答案 0 :(得分:20)

NUMBER(1)列将占用存储1位数字所需的大量空间。这可能超过1个字节(负数需要3个字节,0需要1个字节,数字1-9需要2个字节)

SQL> create table foo( col1 number(1) );

Table created.

SQL> insert into foo values( 1 );

1 row created.

SQL> insert into foo values( 9 );

1 row created.

SQL> insert into foo values( -7 );

1 row created.

SQL> select vsize(col1), col1 from foo;

VSIZE(COL1)       COL1
----------- ----------
          2          1
          2          9
          3         -7

另一方面,具有VARCHAR2(1 BYTE)列的表每行最多使用1个字节

SQL> create table bar( col1 varchar2(1) );

Table created.

SQL> insert into bar values( 'Y' );

1 row created.

SQL> insert into bar values( 'N' );

1 row created.

SQL> select vsize(col1), col1 from bar;

VSIZE(COL1) C
----------- -
          1 Y
          1 N