加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – sql server数据大小限制

发布时间:2020-12-30 14:04:00 所属栏目:MsSql教程 来源:网络整理
导读:这个问题与我的 SQL Data type size有关 varchar(max)似乎最多可以存储2GB. 我无法理解的是,在这个链接 sql row overflow MS说(我的重点): A table can contain a maximum of 8,060 bytes per row. In SQL Server 2008,this restriction is relaxed for tabl

这个问题与我的 SQL Data type size有关
varchar(max)似乎最多可以存储2GB.
我无法理解的是,在这个链接 sql row overflow MS说(我的重点):

A table can contain a maximum of 8,060 bytes per row. In SQL Server
2008,this restriction is relaxed for tables that contain varchar,
nvarchar,varbinary,sql_variant,or CLR user-defined type columns.
The length of each one of these columns must still fall within the
limit of 8,000 bytes; however,their combined widths can exceed the
8,060-byte limit. This applies to varchar,nvarchar,varbinary,
sql_variant,or CLR user-defined type columns when they are created
and modified,and also to when data is updated or inserted.

我不明白这个说法.
他们说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(n):存储在行中的常用文本字段,行数据必须适合一个页面.
> varchar(max),小数据内容:只要所有行数据都适合一个页面,就存储在行中.
> varchar(max),大数据内容:只要数据不再适合一个页面,指针就会存储在行中,varchar(max)数据会被单独存储.在这种情况下,varchar(max)的行为类似于文本数据类型.

请注意,大数据内容取决于表的所有其他列.此外,varchar(max)可以以压缩形式存储文本,使得超过8,060个字符可能适合一个数据页.

在我看来,语句这些列中的每一列的长度仍然必须在8,000字节的范围内似乎不准确,甚至可能是不正确的(varchar(max)列实际上可以容纳2 GB的数据,但不是存储在行中).

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读