可能的复制品: MySQL 中的图像 在 MySQL 中存储图像
我试图开发一个网站,用户上传他们的图片作为注册的一部分。我希望对于每个图像,都应该有一个用 PHP 创建的拇指(这并不是很难)。我想保存拇指(因为他们是非常小的)在数据库中,我使用 MySQL。(我不想把拇指保存为硬盘上的物理文件。) MySQL 允许保存和检索图像数据吗?如果它不支持图像数据,是否有任何免费的数据库可以做到这一点?如果可以提供一个链接,我会很高兴。 谢谢。
你可以在 MySQL 中以 blobs 的形式存储图像,但是,这个问题有以下几个原因:
相反,可以考虑更新表以添加 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 中的值。
当然,这是不好的做法,您可能希望在系统上存储与用户帐户相对应的名称的文件。