3

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

4

3 回答 3

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。

于 2012-10-09T13:14:39.720 回答
2

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 字节。

于 2012-10-09T13:33:07.903 回答
1

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

于 2012-10-09T12:58:54.983 回答