什么时候分配空间

时间:2012-10-09 12:56:09

标签: sql-server sql-server-2008-r2 diskspace nvarchar

如果我将列声明为nvarchar(max),我知道这将分配2Gb的空间,但是一旦我将更改保存到表中,它是否会立即占用2Gb的磁盘空间?或者,是否注意到此列将允许在列中填充2Gb数据?

3 个答案:

答案 0 :(得分:5)

据我了解,在需要之前不会分配空间。

尝试以下查询:

CREATE TABLE SizeTest (

    MyID int primary key
)

INSERT INTO SizeTest SELECT 1
UNION SELECT 2 
UNION SELECT 3
UNION SELECT 4
UNION SELECT 5

EXEC sp_spaceused 'SizeTest'

ALTER TABLE SizeTest ADD MyBigText nvarchar(max)

EXEC sp_spaceused 'SizeTest'

UPDATE SizeTest SET MyBigText = 'This is big text' WHERE MyID = 1

EXEC sp_spaceused 'SizeTest'

DROP TABLE SizeTest

通过执行此语句,您应该获得以下所有三个sp_spaceused调用的以下内容:

name        rows      reserved  data  index_size unused
SizeTest    5           16 KB   8 KB        8 KB    0 KB

绝不分配2GB。

答案 1 :(得分:1)

将允许2Gb的数据:)我想是这样的..它允许直到2Gb但它不会立即分配这个空间

答案 2 :(得分:1)

VARCHAR(MAX)的最大存储大小为2 ^ 31-1个字节(2,147,483,647个字节或2GB - 1个字节)。存储大小是输入的实际数据长度+ 2个字节。输入的数据长度可以是0个字符。由于VARCHAR数据类型中的每个字符都使用一个字节,因此VARCHAR(MAX)数据类型的最大长度为2,147,483,645。

NVARCHAR(MAX)的最大存储大小也是2 ^ 31-1个字节(2,147,483,647字节或2GB - 1个字节)。存储大小(以字节为单位)是输入字符数的两倍+ 2个字节。输入的数据长度可以是0个字符。由于NVARCHAR数据类型中的每个Unicode字符使用两个字节,因此NVARCHAR(MAX)数据类型的最大长度为1,073,741,822。

VARBINARY(MAX)的最大存储大小与VARCHAR(MAX)和NVARCHAR(MAX)的最大存储大小相同,即2 ^ 31-1(2,147,483,647字节或2GB - 1字节)。存储大小是输入数据的实际长度+ 2个字节。输入的数据长度可以是0个字节。