varchar(8000) 和 nvarchar(4000) 的限制是因为 sql server 页面大小(8KB=8192 字节)吗?

var*_*ble 11 sql-server

我知道 varchar(max) 和 nvarchar(max) 允许保存最多 2GB 的数据,但这与这个问题无关。

一个页面 8KB = 8192 字节

在 varchar 中,1 个字符就是 1 个字节。而在 nvarchar 中,1 个字符是 2 个字节。

varchar 允许有 8000 个字符(8000 字节)。而 nvarchar 允许有 4000 个字符(8000 字节)。

这是因为页面大小是 8192 字节吗?

Dav*_*oft 15

这是因为页面大小是 8192 字节吗?

是的。在 SQL Server 版本 7 中,引入了 8K 页,并且 varchar(n) 最大长度从 255 变为 8000。

版本 7 之前的页面大小是 2K,因此允许 varchar 占据页面的大部分也是新的。


J.D*_*.D. 11

是的,据我所知,这是人们使用VARCHAR(8000)orNVARCHAR(4000)代替任何更大大小的主要原因MAX,包括 ,因为这些分别是每种数据类型的最大大小,可以在行中存储该字段的整个数据,这意味着相同的数据页。

这是因为 SQL Server 使用 8 KB 页,即 8,192 字节,其中 8,000 个字节用于用户数据,其余 192 个字节保留用于开销。

您可以在比较 SQL Server 中的 VARCHAR(max) 与 VARCHAR(n) 数据类型VARCHAR(8000)中找到有关VARCHAR(MAX)它们及其差异的更多深入阅读。那篇文章还特别提到:

您可能知道,SQL Server 中的基本存储单位是页。SQL Server 中的页面大小为 8 KB(8192 字节),并且是固定的。在页面上,SQL Server 使用 96 字节作为页眉。我们可以在 SQL Server 中存储 8096 字节(8192-96 字节)的数据。除此之外,页还包含行开销和行偏移,并留下 8000 字节用于数据存储。因此,我们可以使用 varchar(8000) 数据类型存储最多 8000 字节的数据。