【问题标题】:Understanding documentation of "Row-Overflow Data Exceeding 8 KB"了解“行溢出数据超过 8 KB”的文档
【发布时间】:2023-03-03 18:29:01
【问题描述】:

Storage and Row Size 限制为 8060 字节的 SQL Server 文档说

对于 varchar、nvarchar、varbinary、sql_variant 和 CLR 用户定义类型列,各个列的长度仍必须在 8,000 字节的限制范围内。只有它们的组合长度可以超过表的 8,060 字节行限制。

请有人解释并帮助我理解:

  1. “各个列的长度必须仍然下降..” - 这里提到的长度是由 LEN() 还是 DATALENGTH() 表示的?
  2. VARCHAR(MAX) 允许的最大大小如何小于 8060 字节?
  3. “只有它们的组合长度可以超过” - 这是否意味着表中所有 VARCHAR(MAX) 列的大小总和,即使填充到了 DataType 容量,也允许没有错误 - “消息 511 无法创建行的大小为 XXXX,大于允许的最大值 8060"。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    长度限制必须是指数据长度,而不是实际文本长度。对于不同的编码,相同长度的两个字符串可能有不同的大小。

    对于VARCHAR 和其他提到的类型(包括NVARCHAR(MAX)),每列限制为 8060 字节,但几个此类列的总和仍可能超过 8060 字节。 p>

    关于NVARCHAR(MAX) 的明显矛盾,link you gave 继续添加注释:

    此限制不适用于 varchar(max)、nvarchar(max)、varbinary(max)、text、image 或 xml 列。有关这些列的存储的更多信息,请参阅使用大值数据类型、使用文本和图像数据以及使用 XML 数据。

    【讨论】:

    • 哦,所以第一次引用 VARCHAR 暗示 VARCHAR(X) 与 X 作为一个确定的数字,但你提到的注释中对 VARCHAR 的引用意味着 VARCHAR(MAX) 的 MAX 大小受 DataType 大小限制.如果是,是 X 可以是最大 8000/4000,取决于它是 VAR 还是 NVAR。如果对所有这些都是肯定的,那么这是一个难以理解的、愚蠢的文档。如果不是,我的综合能力很差。尽管如此,谢谢!我不能赞成你的解释,因为我的声望数字没有资格。
    猜你喜欢
    • 2013-05-27
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 2016-10-17
    • 2017-04-27
    • 2018-11-26
    • 2015-03-11
    相关资源
    最近更新 更多