有2个 列 char(10), varchar(10),, 插入NULL 的时候的, varchar 占用了2个字节标记位, char 占用 多少 ?
在实际测试中 DBCC IND DBCC PAGE,发现占用字节是一样的,
------解决思路----------------------
drop table test_char_null , test_char_notnull , test_varchar_null , test_varchar_notnull
go
create table test_char_null(t char(4000))
go
create table test_char_notnull(t char(4000))
go
create table test_varchar_null(t varchar(4000))
go
create table test_varchar_notnull(t varchar(4000))
go
insert into test_char_null(t) values(null)
go 10000
insert into test_char_notnull(t) values('1')
go 10000
insert into test_varchar_null(t) values(null)
go 10000
insert into test_varchar_notnull(t) values('1')
go 10000
sp_spaceused test_char_null
go
sp_spaceused test_char_notnull
go
sp_spaceused test_varchar_null
go
sp_spaceused test_varchar_notnull
go
name rows reserved data index_size unused
--------------------- ----------- ------------- ------------- ------------------ -------
test_char_null 10000 40008 KB 40000 KB 8 KB 0 KB
name rows reserved data index_size unused
--------------------- ----------- ------------- ------------- ------------------ -------
test_char_notnull 10000 40072 KB 40000 KB 8 KB 64 KB
name rows reserved data index_size unused
--------------------- ----------- ------------- ------------- ------------------ -------
test_varchar_null 10000 136 KB 120 KB 8 KB 8 KB
name rows reserved data index_size unused
--------------------- ----------- ------------- ------------- ------------------ -------
test_varchar_notnull 10000 200 KB 152 KB 8 KB 40 KB
------解决思路----------------------
#4:
A)分配的存放空间是按照最大长度预留的。
B)char 也要有值信息(标记)用来指示值是否为 NULL。
值信息的长度应该是固定的,所以 record size 一样是应该的。
注:稀疏存储方式例外。