我需要一个数字列作为我正在处理的事情的指标,但我不希望每个记录占用超过一个字节。如果我使用NUMBER(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