如何使用SQL Server(服务器管理工具)存储和检索图像

7
我在尝试将文件插入SQL Server数据库时遇到了困难。我会尽力详细说明:
  1. 存储图像文件(jpeg / png / gif等)应该使用哪种数据类型?现在我的表正在使用image数据类型,但我想知道varbinary是否是更好的选择。

  2. 如何将图像插入数据库?Microsoft SQL Server Management Studio是否有任何内置功能允许将文件插入表格?如果有,如何操作?此外,如何通过使用HTML表单并由PHP处理输入数据并将其放入表格来完成此操作?

  3. 如何从表中获取图像并在页面上显示它?我了解如何SELECT单元格的内容,但如何将其转换为图片?我需要一个头文件(Content type:image / jpeg)吗?

我在MySQL中做这些事情没有问题,但SQL Server环境对我来说仍然很新,并且我正在为工作而进行项目,需要使用存储过程来获取各种数据。

感谢您的所有帮助。

2个回答

5

image 类型已经被弃用了,所以不要使用它。

简单来说,如果你在使用 SQL Server 2008,那么应该使用 FILESTREAM 类型,否则使用 varbinary(max)

更好的解决方案是,如果你在使用 SQL Server 2008,应该使用 FILESTREAM 类型,并且如果不是这种情况,则不要将图像存储在数据库中。数据库并不适合存储此类数据,将 BLOB 放入其中会严重影响性能。 FILESTREAM 通过将实际数据存储在文件系统中来避免这个问题;其他一切都是次优解。

至于如何读取和写入 varbinary 列(如果您选择采用这种非理想的方法),则在 PHP 中它将被表示为流。这是从查询中获取的列值,我相信这也是您需要作为参数传入的东西。


我们正在使用SQL Server 2008,但在下拉列表中似乎没有FILESTREAM类型。如果varbinary可行,那就只能用它了。主要问题是找到一种将图像插入表格的方法。感谢您指出图像类型已被弃用,因为我本来想走这条路的。 :) - Joe Majewski
@Joe Majewski:FILESTREAM在所有版本的SQL Server 2008中都可用。当您使用FILESTREAM时,请勿使用varbinary。您可能无法在下拉列表中看到它 - 请参阅此处的入门指南:http://msdn.microsoft.com/en-us/library/bb933995.aspx - Aaronaught
好的,我现在正在研究这个问题。请注意,我正在使用“真实”数据库的副本进行工作,因为我没有访问所有数据的权限,所以我希望创建一个启用文件流的数据库不会在上线时出现问题。 - Joe Majewski
这是一个关于FILESTREAM的很棒的讨论,同时还有一个链接指向微软研究关于在2005数据库中存储图像的主题(结果<256k好,>1mb不好,因人而异):http://msdn.microsoft.com/en-us/magazine/dd695918.aspx - Robert Wagner

0

有一个可从命令行接受的批量插入工具bcp.exe。阅读this以获取有关如何通过t-sql将二进制数据插入到MS SQL中的更多信息。


哦,我真的很喜欢这个工具的工作方式,但它不完全符合我的需求。基本上,我正在为伊利诺伊北大学开发一个应用程序,该应用程序存储居住在公寓楼里的每位学生的照片。当学生尝试在前台签到时,工作人员可以通过验证照片是否匹配来确认他们确实是学生。我不会将任何这些图片插入数据库中。我只需要能够成功插入一张单独的图像进行测试,以确保我可以正确地检索它。 - Joe Majewski
硬盘上是否有仅适用于单个路径的插入? - Joe Majewski

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