Sql-Server

sql server 數據大小限制

  • August 28, 2011

這個問題與我的SQL 數據類型大小

Avarchar(max)似乎最多可以儲存 2GB 有關。

我無法理解的是,在這個連結中,sql 行溢出MS 說(我的重點):

一個表每行最多可以包含 8,060 個字節。在 SQL Server 2008 中,對包含 varchar、nvarchar、varbinary、sql_variant 或 CLR 使用者定義類型列的表放寬了此限制。 這些列中每一列的長度仍必須在 8,000 字節的限制內;但是,它們的組合寬度可以超過 8,060 字節的限制。這適用於創建和修改 varchar、nvarchar、varbinary、sql_variant 或 CLR 使用者定義類型列,也適用於更新或插入數據時。

我不明白這個說法。

他們說avarchar(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),大數據內容:**一旦數據不再適合一頁,指針將儲存在 row 中,varchar(max) 數據單獨儲存。在這種情況下,varchar(max) 的行為類似於文本數據類型。

請注意,大數據內容取決於表的所有其他列。此外,varchar(max) 可以以壓縮形式儲存文本,這樣一頁數據頁中可以容納超過 8,060 個字元。

在我看來,語句The length of each one of these columns must still be in the limit of 8,000 bytes似乎不准確,甚至可能不正確(varchar(max) 列實際上可以容納 2 GB 的數據,儘管不是儲存在行中)。

引用自:https://serverfault.com/questions/304662