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

osc*_*tin 8 oracle byte numbers oracle11g

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

Jus*_*ave 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)