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

为何Image类型列插入字节值后异常变更?如何解决?

原因分析

你遇到的问题核心是把十六进制二进制值当成普通字符串插入:

  • 当给0x开头的十六进制值加上单引号时,SQL Server会将其识别为字符型数据,而非二进制数据。
  • 最终存储的是原字符串中每个字符的ASCII码对应的十六进制值:比如字符'0'的ASCII码是48(十六进制为0x30),字符'x'的ASCII码是120(十六进制为0x78),所以你看到的结果是原字符串的ASCII编码后的十六进制形式。
解决方法

要正确存储预期的字节值,可按以下方式处理:

1. 移除十六进制值的单引号

直接使用不带单引号的0x前缀十六进制值作为插入值,SQL Server会自动将其解析为二进制数据:

INSERT Into DocumentImage (FileName, DocImage, DateTimeAdded)
VALUES ('TestTemp.xlsx', 
        0x504B030414000600080000002100ECC0AA13A901000035070000130008025B436F6E74656E745F54797065735D2E786D6C20A2040228A0000200000000, 
        GETDATE())

2. 替换IMAGE类型为VARBINARY(MAX)

IMAGE是SQL Server的废弃数据类型,官方已明确后续版本可能不再支持。推荐使用VARBINARY(MAX)存储二进制数据,它功能更完善,符合当前最佳实践:

-- 若允许修改表结构,执行此语句切换数据类型
ALTER TABLE DocumentImage ALTER COLUMN DocImage VARBINARY(MAX)
额外提示

如果二进制数据是从应用程序以字符串形式传入,需在应用端先将十六进制字符串转为字节数组再插入。比如在C#中可使用Convert.FromHexString()方法完成转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:54:56