将空二进制值分配给 varbinary(MAX) 列会创建一个 8000 字节长的列

发布于 2024-10-18 02:17:31 字数 329 浏览 2 评论 0原文

我有一个带有 varbinary(max) 列的表,我试图为该列分配一个零长度的二进制缓冲区,但我得到的不是表中的零长度值,而是一个 8000 字节长的值,其中填充了零:
8000 长零缓冲区
* 显示查询中的 dataSize 列是使用 DATALENGHT(data) 添加的(“SELECT _index, dataSize=DATALENGHT(data), data FROM....”),并显示表上的实际大小 8000字节

长的空缓冲区从哪里来?这是某种默认行为吗?

I have a table with a varbinary(max) column, i am trying to assign to that column a zero-lengh binary buffer, but instead of getting a zero-length value in the table, i am getting an 8000 bytes long value filled with zeros:
8000 long zero buffer
* the dataSize column in the shown query was added using DATALENGHT(data) ("SELECT _index, dataSize=DATALENGHT(data), data FROM....") and shows the actual size on the table of the value

Where does the 8000 bytes long empty buffer come from? is this some kind of default behavior?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

江南烟雨〆相思醉 2024-10-25 02:17:31

如果您的源列是二进制 (8000),则 DATALENGTH(data) 将返回 8000(已完全填充),并且 data 将包含完整的 8000 字节。

但由于您使用的是

SELECT _index, dataSize=DATALENGTH(data), data FROM

它不能是二进制(8000)列 - 因为固定大小的列将为所有行报告相同的数据长度。很可能过去某个时间从 BINARY(8000) 变量或其他方式复制了一些数据。

If your source column is binary(8000), then DATALENGTH(data) will return 8000 (it is fully padded) and data will contain the full 8000 bytes.

But since you are using

SELECT _index, dataSize=DATALENGTH(data), data FROM

It cannot be a binary(8000) column - because a fixed size column will report the same datalength for all rows. It is likely some data was copied there from a BINARY(8000) variable or other means some time in the past.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文