【问题标题】:Image save in database图像保存在数据库中
【发布时间】:2011-02-02 21:07:07
【问题描述】:

我想将上传的图片保存到数据库。现在我的问题是:

  1. SQL Server 2000 for image 的数据类型应该是什么? 一种。图片 湾。变量二进制

  2. 图片保存到数据库的代码是什么?

  3. 如何从数据库中检索图像并显示?

请向我推荐任何教程或指南。或者如果可以的话,请与我分享。

提前致谢。

【问题讨论】:

标签: php sql-server-2000


【解决方案1】:

我不久前就这个主题写了this article。它应该可以帮助您解决#2 和#3。它使用 MySQL,但基本相同,只需将 MySQL 调用替换为 MSSQL 调用即可。

至于 #1,我会选择明显的选择:“图像”。
但是,我不能 100% 确定两者之间的差异。这似乎很明显:)

编辑,根据this,看来image 数据类型已被弃用。它将在未来的版本中删除。不确定这对您有多大影响,因为您使用的是 10 年前的版本,但请记住这一点。

【讨论】:

  • 不一定是答案,但每当我将图像上传到数据库时,我都会对其进行 base64 编码,然后将其存储在 clob 中。当我想展示它时,我会解码它。
  • @Jamie 为什么这是无用的编码?
  • @Col。弹片 - 它不一定没用。这里有一个很好的论据:stoimen.com/blog/2009/04/23/…
  • @Jamie 但这是您链接到的文章中讨论的完全不同的问题!它确实在显示时编码,而不是在节省时间!
  • @Atli 在二进制数据上使用 mysql_real_escape_string 被认为是不好的做法。由于事情的处理方式,取消转义会占用 MySQL 中的大量资源。 (因为转义数据作为字符串处理,整个字符串被读入内存)。由于 MySQL 可以对 HEX 编码的数据使用流运算符,因此将数据发送为 x'".bin2hex( $blob )."' 可以减轻服务器的负载。 (有些人提倡使用 base64 编码来回避 unescape 问题,但这会使存储的数据膨胀大约 33%,其中十六进制流存储为原始二进制数据)。
【解决方案2】:

数据类型应该是文本,因为将图像保存到数据库的最佳方式是保存其路径。让您的操作系统完成存储实际文件的工作。

【讨论】:

  • 虽然我同意这通常是最好的方法,但这不是他所要求的。 - 并且断定地说这是最好的方法是错误的。它通常是最好的方法,但肯定不是总是如此。
  • 你可能有一点,但我会明确地说,将图像存储到数据库是错误的。 :)
【解决方案3】:

通常在 SQL Server 上,您会使用 BLOB(二进制大对象)来存储图像。我们在以前的项目中将它用于 Word 文档,并且效果很好。有关更多信息,请参阅this article on Database Journal,尽管快速搜索 BLOB 类型的 Google 会抛出更多示例。

【讨论】:

  • 我认为 SQL Server 没有 BLOB 类型。还是您可能更多地将其用作所有二进制类型的通用术语?
【解决方案4】:

在 SQLServer IMAGE 或 VARBINARY 中几乎相同。 IMAGE 为 2GB,但 VARBINARY() 需要一个长度参数。 将图像存储在数据库中并不是一个好主意,大小会增加很多,每次备份都需要保存所有图像,随着大小的增加,执行备份和还原的时间也会增加。您还需要更改网络数据包大小(在服务器属性、高级、网络、网络数据包大小) 在最近的 SQLServer 版本中,最合适的数据类型是 varbinary(MAX)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-14
    • 2020-06-01
    • 2021-06-08
    • 2021-06-09
    • 1970-01-01
    • 2015-01-08
    • 2013-02-09
    相关资源
    最近更新 更多