代码之家  ›  专栏  ›  技术社区  ›  Gennady Vanin Геннадий Ванин Mikael Svenson

如何达到每行8060字节和每(varchar,nvarchar)值8000字节的限制?

  •  3
  • Gennady Vanin Геннадий Ванин Mikael Svenson  · 技术社区  · 15 年前

    从我的问题来看” 8078 bytes in 8060 B datapage (SQL Server)? “向我解释了如何在mssqlserver中导出每页8078字节的数据。

    Estimating the Size of a Heap

    如果不购买和学习1000多页的书,我如何达到每行8060字节(在我的另一个问题的答案中提到)和每行8000字节(varchar,nvarchar)的限制?

    在存储分配方面,我确实遗漏了一些东西:要管理的块越少,开销就越大。。。

    2 回复  |  直到 8 年前
        1
  •  6
  •   David Tang gbn    5 年前

    Inside the Storage Engine: Anatomy of a record

    这是给你的 SQL Server 2005数据库

    • 记录头
      • 4字节长
      • 两个字节的记录元数据(记录类型)
      • 在记录中指向空位图的两个字节
      • 两个字节用于记录中的列计数
    • 可变长度列偏移量数组
      • 每个可变长度列两个字节,给出列值末尾的偏移量 版本控制标记

    • 4字节(记录头)
    • 3空位图
    • 2字节计算可变长度
    • 14时间戳

    但是,如果您有40个varchar(200)列

    • 0固定长度
    • 6空位图
    • 2字节计算可变长度
    • 202 x 40=8080毫米
    • 14时间戳

    总计=8080+4+6+2+14=8106。世界跆拳道联盟?创建此表时会收到警告

        2
  •  1
  •   Pondlife    15 年前

    我不太清楚你在问什么,但如果你的问题是“为什么最大行长是8060字节而不是其他数字?”,或“为什么NVARCHAR的最大长度为8000字节?”简而言之,谁知道呢?(正如gbn所说,谁在乎呢?)

    所有MSSQL限制—数据类型大小、最大行大小、每个表的列数、每个索引的列数等等—都只是微软的设计决定。我很确定这些决策背后有大量的工程文档,但大多数人都无法获得这些信息。

    如果您对限制的具体细节、行大小的计算方式等感兴趣,那么阅读MSSQL文档是最好的开始。

    推荐文章