我可以在MySQL中存储图像吗?

时间:2011-06-24 18:32:17

标签: php mysql image

  

可能重复:
  Images in MySQL
  Storing images in MySQL

我正在尝试开发一个网站,用户上传图片作为注册的一部分。我希望每个图像都应该有一个用PHP创建的拇指(这并不困难)。我想在数据库中保存拇指(因为它们非常小),我使用MySQL。 (我不想将拇指保存为驱动器上的物理文件。)
MySQL是否允许保存和检索图像数据,我该如何处理?如果它不支持图像数据,是否有任何免费的数据库呢?如果可以提供链接,我会很高兴 感谢。

4 个答案:

答案 0 :(得分:218)

是的,您可以将图像存储在数据库中,但在我看来这是不可取的,这不是一般做法。

一般做法是将图像存储在文件系统上的目录中,并存储对数据库中图像的引用。例如图像的路径,图像名称等。或者,您甚至可以将图像存储在内容传送网络(CDN)或跨越一大片物理区域的众多主机上,并存储引用以访问数据库中的这些资源。

图像可能会变得非常大,大于1MB。因此,将数据存储在数据库中可能会对数据库和数据库与Web服务器之间的网络造成不必要的负担,如果它们位于不同的主机上。

我曾在拥有400,000多名员工的初创公司,中型公司和大型科技公司工作过。在我13年的专业经验中,我从未见过有人将图像存储在数据库中。我这样说是为了支持这种说法,这是一种不常见的做法。

答案 1 :(得分:35)

你需要保存为blob,mysql中的LONGBLOB数据类型才有效。

例如:

CREATE TABLE 'test'.'pic' (
    'idpic' INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    'caption' VARCHAR(45) NOT NULL,
    'img' LONGBLOB NOT NULL,
  PRIMARY KEY ('idpic')
)

正如其他人所说,这是一种不好的做法,但可以做到。但不确定这段代码是否可以很好地扩展。

答案 2 :(得分:11)

您可以将图像存储在MySQL中作为blob。但是,由于以下几个原因,这是有问题的:

  • 图像可能难以操作:在执行批量操作之前,必须先从数据库中检索它们。
  • 除了在整个数据库存储在RAM中的极少数情况下,MySQL数据库最终存储在磁盘上。这意味着您的数据库映像将转换为blob,插入数据库,然后存储在磁盘上;只需将它们存储在磁盘上即可节省大量开销。

相反,请考虑更新表以添加image_path字段。例如:

ALTER TABLE `your_table`
ADD COLUMN `image_path` varchar(1024)

然后将图像存储在磁盘上,并使用图像路径更新表格。需要使用图像时,使用指定的路径从磁盘检索图像。

这种方法的一个有利的副作用是图像不一定存储在磁盘上;您可以轻松存储URL而不是图像路径,并从任何连接互联网的位置检索图像。

答案 3 :(得分:5)

您需要将图像作为BLOB存储在数据库中。

您需要在表格中创建一个名为PHOTO的列,并将其设置为mediumblob。

然后你会想要从表格中得到它:

    $data = file_get_contents($_FILES['photo']['tmp_name']);

然后将列设置为$ data中的值。

当然,这是不好的做法,您可能希望将文件存储在系统中,其名称与用户帐户相对应。