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的问题可以同样方法试试就知道了
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的问题可以同样方法试试就知道了
varchar2 是动态分配的空间 就是你存的数据是多少字节的它就用多少字节
char 是固定分配的空间哪怕你存一个字节的数据都会占用9个字节的空间,当然其他的8个字节oracle会用空格来填充
你可以用下面的语句来看数据库是怎样存放数据的
select dump(column_name,16) from table_name;2 为空的列如果在最后的话 oracle 就不分配空间给它存储
而像你说的那种中间为null 而后面还有数据的 oracle就为每个为null的列用一个字节 0xff 来表示null