1

我将小拇指存储在 MySQL 数据库中。使用 PHP,我从图像创建缩略图,然后将其存储到 BLOB 列中。

似乎 MySQL 将二进制图像保存为数据库中的 Base64 字符串。问题是 MySQL 似乎将其存储为文件application/octet-stream而不是jpg文件。

我知道,因为我用这段代码测试了 Base64 字符串:

<?php
$encoded_string = "....";
$imgdata = base64_decode($encoded_string);

$f = finfo_open();

$mime_type = finfo_buffer($f, $imgdata, FILEINFO_MIME_TYPE);

echo $mime_type;
?>

MySQL 会自动将我的图像转换为 Base64 字符串吗?如果是这样,有没有办法确保将其保存为 JPG?


我知道将拇指保存到文件系统更好,但不幸的是情况并非如此,我不是在寻找将其保存到文件系统的答案。我想知道为什么它被保存为octed stream.

WideImage用来创建拇指,如下所示:

        $thumb = \WideImage::load ( $filepath )
                            ->resize(117, 88)
                            ->crop ( 'center', 'center', 117, 88 )
                            ->asString('jpg');

该变量$thumb包含有效的二进制数据。因为我可以打印它,它看起来不错,而且还fwrite写了一个很好的 JPG。

然后我使用 INSERT 查询将其保存到数据库中。但是当我再次选择它时,它给了我一个octed stream格式。

4

2 回答 2

2

最好的方法是将图像存储在文件系统上,然后通过 MySQL 引用它的位置。不建议在 MySQL 中存储图像。为什么要给您的数据库增加不必要的压力?所有大型网站(Facebook 等)都将其图像存储在文件系统上。

于 2013-07-19T17:20:20.543 回答
-1

在数据库中存储图片和其他文档有很多很好的理由。1、对图片或文档的位置有一定的控制。当存储为单个文件时,很容易移动、意外删除或丢失内容。备份也很方便。通过将文档保存在数据库中。由于必须从数据库中检索文档,因此访问速度会变慢。

如果存储为单个文件并在数据库中引用,则在移动文档时引用将变为无效。

于 2021-10-17T21:17:24.653 回答