提问人:Dennis 提问时间:11/14/2023 最后编辑:Dennis 更新时间:11/15/2023 访问量:50
我是否在我的 Postgres 数据库中以正确的格式存储图片?
Did I store pictures in the correct format in my Postgres database?
问:
我有一个Postgres数据库,里面有一个单独的图片表。我已经将图片存储在数据库中,当我像这样列出它们时;
SELECT id,
pg_typeof(image) || ': ' || encode(image::bytea, 'escape') AS image_representation
FROM picture_table;
我看到这个列表;
问题是,我是否以正确的方式存储图片?,我怀疑我将 base64 数据存储为二进制,因此占用了所需的更多空间。
这是最有效的方法吗?,它是Postgres中的“bytea”类型。
示例:如果我有一张 900 字节的二进制图片,如果它存储为 base64,那么存储为 base64 时将占用大约 2400 字节。我看到它存储为 base64。或者它只是查询后显示的方式。
答:
您将文本写入数据库的 bytea 列中。保存为类型文本的文本与保存为 bytea 类型的文本占用的磁盘空间量相同。如果你愿意,你可以这样做,但由于使用 bytea 很尴尬,你可能应该避免不必要的事情。
由于它已经编码为文本,因此您可以将其保存为文本。“data:image/png;base64“是您(或您的客户)保存到数据库中的文字字符(以及其他字符),它不是PostgreSQL提供给您的。
示例:如果我有一张 900 字节的二进制图片,如果它存储为 base64,则存储为 base64 时将占用大约 2400 字节
不,编码为 base64 的 900 字节只需要 1200 多一点,而不是 2400。即使将其编码为十六进制也不会占用 2400 个字节。这只是查看原始大小,没有考虑可能发生的任何压缩。如果要使压缩生效,则应查看数据占用的实际大小,而不是试图从理论上解决它。
我看到它存储为 base64。或者它只是查询后显示的方式。
它存储为 base64。但这不是PostgreSQL所做的,它只是你的客户端发送数据保存的方式。你告诉它使用转义格式,但只看你显示的图像,实际上没有进行转义,因为没有什么需要转义的。
评论
bytea
png
avif
webp
heic
=
%3D