将空二进制值分配给 varbinary(MAX) 列会创建一个 8000 字节长的列
我有一个带有 varbinary(max) 列的表,我试图为该列分配一个零长度的二进制缓冲区,但我得到的不是表中的零长度值,而是一个 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:
* 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您的源列是二进制 (8000),则
DATALENGTH(data)
将返回 8000(已完全填充),并且 data 将包含完整的 8000 字节。但由于您使用的是
它不能是二进制(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
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.