2011-03-30 1108 views
4

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

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

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

  1. 我应该在我的 (MySQL的)数据库中的Base64编码的数据存储与用户的信息,其余 一起,还是应该 我创建了一个静态文件和链接, 有必要吗?

  2. 如果存储在 数据库是要走的路,我应该使用哪些数据类型 ?

回答

6

有没有必要Base64编码的图像。 MySQL完全有能力存储二进制数据。只要确保你使用'blob'字段类型,而不是'文本'。文本字段受制于字符集转换,这可能会损坏您的.png数据。 blob字段不会被翻译。

同样,base64编码增加了大约35%的文本大小,所以你会浪费一大块空间,没有任何好处。

但是,将图像存储在数据库中通常是一个坏主意。您确实有图像“永远在那里”的优势,但在备份时间和各种有趣尝试获取图像并显示在您的应用程序/网页上的绝对巨大转储。

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

+0

我不跟着你马克。童子军荣誉。 – 2011-03-30 20:30:21

2

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

编辑:马克的关于二进制v右侧底座64

2

只是将文件保存在BLOB字段中。如果您打开某些优化(灰度或黑白),此PNG文件不应大于1KB。

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

  • 备份,
  • 额外复制如果多服务器
  • 安全 - 访问权限的文件目录,但也文件,
  • 无交易 - 例如DB插入确定,但文件写入失败,
  • 需要多个目录中发布文件,以避免大的目录清单(依赖于文件系统的功能)