gpt4 book ai didi

mysql - 将图像直接存储在数据库中还是作为base64数据存储?

转载 作者:IT老高 更新时间:2023-10-28 12:56:14 57 4
gpt4 key购买 nike

在数据库中存储图像的常用方法是在存储数据之前将图像转换为base64数据。这个过程将增加 33% 的大小。或者,可以将图像直接存储为 BLOB;例如:

$image = new Imagick("image.jpg");
$data = $image->getImageBlob();
$data = $mysqli->real_escape_string($data);
$mysqli->query("INSERT INTO images (data) VALUES ('$data')");

然后用

显示图片
<img src="data:image/jpeg;base64,' .  base64_encode($data)  . '" />

使用后一种方法,我们节省了 1/3 的存储空间。为什么在 MySQL 数据库中将图像存储为 base64 更常见?

更新:关于将图像存储在数据库中的优缺点有很多争论,大多数人认为这不是一种实用的方法。无论如何,在这里我假设我们将图像存储在数据库中,并讨论这样做的最佳方法。

最佳答案

我认为图像(文件)通常不存储在 base64 编码的数据库中。相反,它们以原始二进制形式存储在二进制列、blob 列或文件中。

Base64 仅用作传输机制,不用于存储。例如,您可以将 base64 编码的图像嵌入到 XML 文档或电子邮件消息中。

Base64 也是流友好的。您可以即时编码和解码(不知道数据的总大小)。

虽然 base64 适合传输,但不要存储您的图像 base64 编码

Base64 不提供校验和或任何具有任何存储值(value)的东西。

Base64 编码比原始二进制格式增加了 33% 的存储需求。它还增加了必须从持久存储读取的数据量,这通常仍然是计算中的最大瓶颈。读取更少的字节并动态编码它们通常更快。仅当您的系统受 CPU 限制而不是 IO 限制,并且您定期以 base64 格式输出图像时,才考虑存储在 base64 中。

内嵌图像(嵌入在 HTML 中的 base64 编码图像)本身就是一个瓶颈——您通过网络发送的数据要多 33%,并且是串行发送的(网络浏览器必须等待内嵌图像才能完成)下载页面 HTML)。

在 MySQL 和类似的数据库上,出于性能原因,您可能希望将非常小的图像以二进制格式存储在 BINARYVARBINARY 列中,以便它们在与主键相同的页面,而不是 BLOB 列,后者始终存储在单独的页面上,有时会强制使用临时表。

如果您仍希望存储 base64 编码的图像,无论您做什么,请确保不要将 base64 编码的数据存储在 UTF8 列中,然后对其进行索引。

关于mysql - 将图像直接存储在数据库中还是作为base64数据存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9722603/

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com