在MySQL中存储Base64 PNG

时间:2011-03-30 20:24:34

标签: mysql sencha-touch

我正在使用Sencha Touch在iPad上捕获用户的数据。这包括标准表格(姓名,电子邮件等)以及客户的签名(请参阅插件here)。

基本上,插件从用户的签名中获取坐标,并返回Base64 PNG数据。

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

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

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

4 个答案:

答案 0 :(得分:6)

无需对图像进行base64编码。 MySQL完全能够存储二进制数据。只需确保使用'blob'字段类型,而不是'text'。文本字段受字符集转换的影响,这可能会丢弃.png数据。 blob字段未翻译。

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

但是,将图像存储在数据库中通常是个坏主意。你确实拥有图像永远“正确”的优势,但是在备份时可以实现绝对巨大的转储,以及尝试将图像输出并显示在应用程序/网页中的各种乐趣。

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

答案 1 :(得分:2)

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

编辑:关于二进制v。base 64

的标记是正确的

答案 2 :(得分:2)

只需在BLOB字段中保存文件即可。如果你进行一些优化(灰度或B / W),这样的PNG文件不应该大于1KB。

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

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

答案 3 :(得分:0)

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