这个问题与我的SQL数据types大小有关
一个varchar(max)似乎能够存储高达2GB。
但我不明白的是,在这个链接SQL行溢出 MS说(我的重点):
一个表最多可以包含每行8,060个字节。 在SQL Server 2008中,对于包含varchar,nvarchar,varbinary,sql_variant或CLR用户定义types列的表,这种限制是放松的。 这些列中的每一列的长度必须仍然在8,000字节的范围内 ; 但是,它们的组合宽度可能会超过8060字节的限制。 这适用于创build和修改varchar,nvarchar,varbinary ,sql_variant或CLR用户定义types列时,以及更新或插入数据的时间。
我不明白这个说法。
他们说一个varchar(max)可以容纳2GB,但是他们在上面的链接中说,列长度不能超过8KB
这不矛盾还是我在这里错过了什么?
说清楚一点,我们可以采取一个非常根本的说法:
A table can contain a maximum of 8,060 bytes per row.
换句话说:每行必须放入一个页面(8 kB)。 如果可能的话,许多行可以放入一个页面 – 但从来就不是这样。
如何处理二进制大对象(TEXT,NTEXT,BLOB)? 这些列中的数据存储在一个特殊的地方。 该行只包含一个指向数据的指针,因此上面的基本语句仍然成立:一个表行必须适合一个页面。
Binary large data is stored outside of the table. Each table row just holds a pointer in each BLOB field which actually points to the data.
说到这,新的varchar(max)特性是特殊的,其行为如下:
请注意, 大数据内容取决于表格的所有其他列。 此外,varchar(max)可以以压缩forms存储文本,使得超过8060个字符可能适合一个数据页面。
在我看来,声明这些列的每一个的长度必须仍然在8,000字节的限制之内,似乎并不准确,甚至可能是不正确的(一个varchar(max)列实际上可以容纳2GB的数据,尽pipe不是被存储在行中)。