SQL Server 2012及更高版本中varchar
类型占用的空间是多少?也就是说,如果我有3列类型为nvarchar
(或varchar
的列),并且它们都是空的,那么表中会占用多少空间?
CREATE TABLE dbo.ReferringUrl
(
Id int IDENTITY(1, 1) NOT NULL,
RequestUrl nvarchar(384) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
ReferringUrlName nvarchar(384) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
ReferringIpAddress nvarchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
)
答案 0 :(得分:4)
非空varchar(n)值需要2个字节的长度加上每个字符1个字节。 nvarchar(n)每个字符需要2个字节。零长度字符串对于varchar和nvarchar只需要2个字节,对于长度需要2个字节,对于值只需要零个字节。 NULL值根本不需要空格,因为空位图中的相应位表示该值为null且不存储长度或值。
启用页面压缩时,空间要求不同。在这种情况下,空间需求取决于前缀和字典压缩。
答案 1 :(得分:1)
您可以使用DBCC PAGE
或SQL Server内部查看器自行测试。
以下是一些示例,说明了以下几点。
varchar
列不占用任何空间。INSERT dbo.ReferringUrl
(Id,
RequestUrl,
ReferringUrlName,
ReferringIpAddress)
VALUES (1,N'AAA','BBB','CCC'),
(2,NULL,NULL,NULL),
(3,'','',''),
(4,NULL,NULL,'CCC'),
(5,'','','CCC'),
(6,'AAA',NULL,NULL),
(7,'AAA','',''),
(8,N'AAA','BBB','CCC')
上面的图片来自SQL Server内部查看器 - 它还有助于为下面显示的行中的各个组件提供密钥。
(由于内部查看器中的错误,这不会突出显示,但请注意它与前一行的长度相同)