我可以在 MySQL 中存储图像吗

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

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

455237 次浏览

你可以在 MySQL 中以 blobs 的形式存储图像,但是,这个问题有以下几个原因:

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

相反,可以考虑更新表以添加 image _ path 字段,例如:

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

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

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

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

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

图像可以变得非常大,大于1MB。因此,在数据库中存储图像可能会给数据库以及数据库和 Web 服务器之间的网络带来不必要的负载,如果它们位于不同的主机上的话。

我曾在创业公司、中型公司和拥有40万员工的大型科技公司工作过。在我13年的职业生涯中,我从未见过任何人在数据库中存储图像。我这样说是为了支持这种说法,这是一种不寻常的做法。

您需要保存为 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')
)

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

您将需要在数据库中以 BLOB 的形式存储图像。

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

然后你会想要得到它的形式是这样的:

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

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

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