VarBinary与Image SQL Server数据类型存储二进制数据?


90

我需要将二进制文件存储到SQL Server数据库中。Varbinary和Image中哪种数据类型更好?

Answers:


141

由于不建议使用图像,因此应使用varbinary。

每个Microsoft (感谢链接@Christopher)

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

固定长度和可变长度的数据类型,用于存储大型非Unicode和Unicode字符以及二进制数据。Unicode数据使用UNICODE UCS-2字符集。


1
@ cmsjr:可能是因为如Microsoft所说:“在将来的Microsoft SQL Server版本中将删除图像数据类型。”
Ehsan 2013年

4
@Ehsan我只能假设您对不赞成使用的术语不熟悉。通常,当您说某事已过时时,您是说不应使用它,因为将来会删除它。因此,我的帖子和您在评论中发表的报价本质上是同一件事。
cmsjr 2013年

不用担心,您会提出一个好要点。我将更新措词。
cmsjr

我不会将其称为“仅链接”答案。我将其称为“对问题的简洁正确答案,其中包括一些倾向于学习更多内容的有用链接”。
cmsjr

2
坦率地说,我不愿进行编辑,因为您以令人反感和威胁性的语气接近它。也许这不是您无礼的意图,但似乎您对我是如此。粗鲁常常会导致人们摒弃原本好的想法。我按照您的建议对内容进行了改进,但是我也想请您考虑一下如何提出建议。
cmsjr

13

varbinary(max) 是要走的路(在SQL Server 2005中引入)


9

FileStream在SQL Server 2008中还引入了一些小技巧。


浮躁:外表聪明
利亚姆

在普通的话语中,“相当的冒犯”的含义(而不是“冒犯的”)更笼统……我认为最合适。
授予2015年

这个问题与列格式有关,FileStream仅是一种存储行为。通过使用varbinary(max)SQL Server实例并对其进行更改来实现Filestream 。
paqogomez,2015年

6

https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/ntext-text-and-image-transact-sql

图片

从0到2 ^ 31-1(2,147,483,647)字节的可变长度二进制数据。仍然支持使用图像数据类型,但是请注意:

https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/binary-and-varbinary-transact-sql

varbinary [(n | max)]

可变长度的二进制数据。n可以是1到8,000之间的值。max表示最大存储大小为2 ^ 31-1字节。存储大小是输入数据的实际长度+ 2个字节。输入的数据长度可以为0个字节。varbinary的ANSI SQL同义词是二进制变化的。

因此,两者大小均相等(2GB)。但要注意:

https://docs.microsoft.com/zh-cn/sql/database-engine/deprecated-database-engine-features-in-sql-server-2016#features-not-supported-in-a-future-version- SQL服务器

尽管仍不确定“图像”数据类型的末尾,但应使用“未来”证明等效项。

但是您必须问自己:为什么将BLOBS存储在列中?

https://docs.microsoft.com/zh-cn/sql/relational-databases/blob/compare-options-for-storing-blobs-sql-server

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.