Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 什么时候分配空间_Sql Server_Sql Server 2008 R2_Diskspace_Nvarchar - Fatal编程技术网

Sql server 什么时候分配空间

Sql server 什么时候分配空间,sql-server,sql-server-2008-r2,diskspace,nvarchar,Sql Server,Sql Server 2008 R2,Diskspace,Nvarchar,如果我将一列声明为nvarchar(max),我知道这将分配2Gb的空间,但一旦我将更改保存到表中,它是否会立即占用2Gb的磁盘空间?或者,是否注意到此列将允许在列中填充2Gb的数据?将允许2Gb的数据:)我想是的。。它允许直到2Gb,但不会立即分配此空间据我所知,直到需要时才分配空间 请尝试以下查询: CREATE TABLE SizeTest ( MyID int primary key ) INSERT INTO SizeTest SELECT 1 UNION SELECT 2

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

将允许2Gb的数据:)我想是的。。它允许直到2Gb,但不会立即分配此空间

据我所知,直到需要时才分配空间

请尝试以下查询:

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。

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


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


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

我了解这一点,但创建列时是否需要2Gb的磁盘空间?它允许2Gb的空间,但不会立即分配此空间。是的,只有在需要时才会使用2Gb