You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何SQL Server中image数据类型在sys.all_columns的max_length值为16?

关于SQL Server sys.all_columns中image类型max_length显示为16的解释

你看到的16并非image类型支持的最大数据存储长度,该数值仅代表存储指针的字节长度,具体逻辑如下:

  • 存储逻辑说明:image属于SQL Server早期推出的大对象(LOB)数据类型,本身实际支持存储的二进制数据最大长度为2^31-1字节,约2GB。这类旧版大对象类型的数据默认不会直接存储在普通数据行页中,数据行内仅会保存一个指向LOB数据实际存储页的指针结构,该指针固定占用16字节,sys.all_columns的max_length字段在这里记录的就是这个行内指针的占用长度,而非实际可存储的数据上限。
  • 同类类型对比:同属旧版弃用大对象类型的text、ntext,在sys.all_columns中查询到的max_length同样为16,逻辑和image类型完全一致。
  • 新旧类型区分:目前image类型已被官方标记为弃用,后续SQL Server版本将会移除该类型,新开发建议使用替代类型varbinary(max)。varbinary(max)类型在sys.all_columns中的max_length会显示为-1,用来标识该类型为支持超8000字节存储的大对象类型。
  • 验证查询:你可以执行以下查询确认所有image类型列的max_length默认均为16,属于全局固定值,和建表时的配置无关:
SELECT name, system_type_id, max_length 
FROM sys.all_columns 
WHERE system_type_id = 34 -- 34为image类型对应的系统类型ID

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:39:02