从我的问题“8078 bytes in 8060 B datapage (SQL Server)?”开始,向我解释了如何在MS SQL Server中每页导出8078字节的数据。
如果我计算每页用于数据存储的字节数(无开销),只有一行有一列非索引的固定大小类型记录(根据MSDN文章Estimating the Size of a Heap),那么我来到8087字节(每页)。
如何在不购买和学习1000多页书籍的情况下达到每行8060字节的限制(在我的其他问题的答案中提到)和每个(varchar,nvarchar)8000字节?
我肯定错过了存储分配方面的东西:管理的块越少,开销就越大......
答案 0 :(得分:6)
Inside the Storage Engine: Anatomy of a record
这适用于 SQL Server 2005
所以,对于一个char(8000)
但是,如果你有40个varchar(200)列
总计= 8080 + 4 + 6 + 2 + 14 = 8106. WTF?创建此表时会收到警告
我不会太依赖它:这些信息没有实际的日常价值
答案 1 :(得分:1)
我不完全确定你在问什么,但如果你的问题是“为什么最大行长度为8060字节而不是其他数字?”或“为什么NVARCHAR的最大长度为8000字节? “那么简短的回答是,谁知道呢? (正如gbn所说,谁在乎呢?)
所有MSSQL限制 - 数据类型大小,最大行大小,每个表的列数,每个索引的列数等 - 只是Microsoft的设计决策。我很确定决策背后有大量的工程文档,但大多数人无法访问这些信息。
如果您对限制的具体细节感兴趣,如何计算行大小等,那么阅读MSSQL文档是最好的起点。