在 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 中是不是很好?