我可以在MySQL中存储图像

可能重复:
在MySQL中的图像
在MySQL中存储图像

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

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

一般的做法是将图像存储在文件系统上的目录中,并存储对数据库中图像的引用。 例如图像path,图像名称等等。或者,您甚至可以将图像存储在内容交付networking(CDN)上,或者在一些广阔的物理领土上存储多个主机,并存储引用以在数据库中访问这些资源。

图片可能会变得很大,大于1MB。 因此,将数据存储在数据库中可能会给数据库和数据库与Web服务器之间的networking带来不必要的负载,如果它们位于不同的主机上的话。

我曾在初创公司,中型公司和拥有40万员工以上的大型科技公司工作。 在我11年的专业经验中,我从来没有见过任何人将图像存储在数据库中。 我这样说是为了支持这种说法,这是一种不寻常的做法。

您将需要保存为blob,MySQL中的LONGBLOB数据types将工作。

例如:

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

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

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

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

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

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

然后将图像存储在磁盘上,并使用图像path更新表格。 当您需要使用图像时,请使用指定的path从磁盘检索它们。

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

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

你需要在你的表格中创build一个名为PHOTO的列,并将其设置为一个中等程度。

那么你会想从表单中得到它:

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

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

当然,这是不好的做法,你可能想要将文件存储在系统中,并且使用与用户帐户相对应的名称。

如果你反对将服务器上的图像作为物理文件存储,而你只是存储小拇指,你可以尝试使用base64编码,并在数据库中存储该string。 虽然不知道这对于可伸缩性有多好。

编辑:它似乎在其他职位和其他问题中提到的BLOB方法会比base64编码更好。