首页 > 解决方案 > 为什么 SQL Server Image 数据类型在 sys.all_columns 中将 max_length 设置为 16

问题描述

在通过SYS.all_columns检查SQL Server中的列定义时,我发现图像数据类型的max_length设置为16。有人可以帮忙解释一下这是什么意思吗?

标签: sql-servermetadata

解决方案


您在那里看到的 16 不是指数据的最大大小,而是指指向 LOB 值的指针的大小(默认情况下存储在行外)。

文档sys.columns提到了 16 个字节,但在解释原因方面做得很差(它只说它适用于text但实际上它适用于textntextimage)。我最近提交了一个 PR 来说明这一点,并且它被批准了(应该在下周左右发布)。

关于该TEXTPTR主题有一个更好的小信息块,其中一个示例说:

返回 16 字节的文本指针

请注意,自 SQL Server 2005 发布超过 16 年以来,文档就有此警告:image

重要的!在 SQL Server 的未来版本中将删除 ntext、text 和 image 数据类型。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。

就在几个月前,我还在博客上写过这个:


推荐阅读