Column A NUMBER(1) will take up as much space as needed to store a 1-digit number. This will probably be more than 1 byte (negative numbers require 3 bytes, 0 - 1 byte, digits 1-9 - 2 bytes)
 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 
A table with a VARCHAR2(1 BYTE) column VARCHAR2(1 BYTE) , on the other hand, will use no more than 1 byte per storage row
 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 
 source share