在 SQL Server 2005 中存储图像和文档使用哪种数据类型?

8

我必须扩展一个现有的.NET应用程序,将图像和文档(大多数为pdf文件)存储在SQL Server 2005数据库中。

哪种SQL Server数据类型最适合保存这些文件?是否有意义创建一个单独的表来保存这些字段,或者把这些字段直接放在“正常”的业务表中,只要选择语句不选择它们(或SELECT *)就没有问题?

4个回答

7

SQL Server 2005: Blobvarchar(max)
SQL Server 2008: FileStream

在 SQL Server 2005 中,用 varchar(max) 替代 Blob。而在 SQL Server 2008 中,则使用 FileStream。


“Blob”?那不是真正的数据类型。 “旧”的类型textntextimage已被弃用,因此2005年的正确答案应该是(正如其他人正确指出的那样)varchar(MAX) - Lucero
varchar?varbinary,肯定是吧? - podiluska

6

VARBINARY或FILESTREAM

不需要将它们存储在单独的表中 - 有内置的控制可以使用sp_tableoption强制将其存储在/不在行内:

http://msdn.microsoft.com/en-us/library/ms189087.aspx

http://msdn.microsoft.com/en-us/library/ms186981.aspx

http://www.microsoft.com/sqlserver/2008/en/us/wp-sql-2008-manage-unstructured.aspx

(请注意,如果您使用不同的文件组并独立对其进行备份等操作,则将其存储在单独的表中可能会带来好处,但这可能被认为是例外情况)


1
FILESTREAM 直到 SQL Server 2008 才可用。 - Martin Smith

3

使用varbinary(max)在SQL Server中存储图像和文档。我建议将它们放在单独的表中,而不是主表中。


1
回答你问题的另一部分,如果你要在数据库中存储二进制数据,请不要将数据与其他字段混合在一个表中。你可能不会对二进制数据进行任何搜索或索引,并且访问任何元数据的速度会因表的大小而变慢。只需将图像/文件保存在单独的表中。
虽然我可以想到保留SQL服务器数据库中文件的好理由(例如:不是Web应用程序),但正如@JonH所说,除非你有充分的理由,否则请将它们保存在文件系统中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接