1、
08:28:43 SQL> create table t1(a varchar2(9),b char(9));表已创建。已用时间:  00: 00: 00.94
08:56:52 SQL> insert into t1 values ('009','009');已创建 1 行。已用时间:  00: 00: 00.66
08:57:02 SQL> select vsize(a),vsize(b) from t1;  VSIZE(A)   VSIZE(B)
---------- ----------
         3          9已用时间:  00: 00: 00.25
2的问题可以同样方法试试就知道了

解决方案 »

  1.   

    这个问题以前我也问过1   varchar2(9) 或 char(9),他们在存储上有何区别,例如当我插入009 
       varchar2 是动态分配的空间 就是你存的数据是多少字节的它就用多少字节
       char 是固定分配的空间哪怕你存一个字节的数据都会占用9个字节的空间,当然其他的8个字节oracle会用空格来填充
    你可以用下面的语句来看数据库是怎样存放数据的
    select dump(column_name,16) from table_name;2  为空的列如果在最后的话 oracle 就不分配空间给它存储
       而像你说的那种中间为null 而后面还有数据的 oracle就为每个为null的列用一个字节 0xff 来表示null
      

  2.   

    varchar2变长,char(9)定长9个字符.不足的用空格补充.空不影响非空的数据的存储,具体看oracle中的关于segment介绍/