在 MySQL 中存储 Base64 PNG

Posted

技术标签:

【中文标题】在 MySQL 中存储 Base64 PNG【英文标题】:Storing Base64 PNG in MySQL 【发布时间】:2011-03-30 20:24:33 【问题描述】:

我正在使用 Sencha Touch 从 iPad 上的用户那里获取数据。这包括标准表格(姓名、电子邮件等)以及客户的签名(参见插件here)。

本质上,该插件从用户签名中获取坐标并将 Base64 PNG 数据返回给我。

一旦我有了签名数据,我就想存储它。我的两个问题是:

    我应该将 Base64 数据存储在我的 (mysql) 数据库以及其他数据库 用户的信息,或应该 我创建一个静态文件并链接为 必要的?

    如果存储在 数据库是要走的路,什么数据 我应该使用哪种类型?

【问题讨论】:

【参考方案1】:

无需对图像进行 base64 编码。 MySQL 完全有能力存储二进制数据。只要确保您使用“blob”字段类型,而不是“文本”。文本字段受字符集转换的影响,这可能会破坏您的 .png 数据。不翻译 blob 字段。

同样,base64 编码将文本大小增加了大约 35%,因此您会浪费大量空间而没有任何好处。

但是,将图像存储在数据库中通常不是一个好主意。您确实具有图像始终“就在那里”的优势,但在备份时会产生绝对巨大的转储,并且尝试将图像取出并显示在您的应用程序/网页中会带来各种乐趣。

最好将其外部存储在以记录的主键命名的文件中,以便于访问/验证。

【讨论】:

我没有关注你,马克。童子军荣誉。【参考方案2】:

只需将文件保存在 BLOB 字段中。如果您进行一些优化(灰度或黑白),此类 PNG 文件不应大于 1KB。

在 DB 之外存储文件似乎很容易,但有一些事情需要考虑:

备份, 多服务器时的额外复制 安全性 - 对文件目录的访问权限,以及对文件的访问权限, 没有交易 - 例如数据库插入正常,但文件写入失败, 需要在多个目录中分发文件以避免大型目录列表(取决于文件系统功能)

【讨论】:

【参考方案3】:

Blob 将存储 Base64。它会给你你所需要的。将其存储在数据库中可为您提供内置的关系功能,如果您将其存储在静态文件中,则必须自己编写代码。希望这可以帮助。祝你好运先生。

编辑:关于二进制 v.base 64 的标记是正确的

【讨论】:

【参考方案4】:

将您的字段设置为 Blob 数据类型,它完美存储 base64EncodedString

【讨论】:

以上是关于在 MySQL 中存储 Base64 PNG的主要内容,如果未能解决你的问题,请参考以下文章

在 MYSQL 数据库中存储 base64 字符串的最佳方法是啥?

在 BASE64 中对每个字符串进行编码以存储在 Mysql 中是不是很好?

mysql使用blob存储base64格式文件

当我在Mysql存储Base64数据时,崩了!!

使用 base64 代替原始文件(png、jpg、jpeg、gif)有啥好处吗?

MySQL - Base64 与 BLOB