2011-03-30 1112 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插入確定,但文件寫入失敗,
  • 需要多個目錄中發佈文件,以避免大的目錄清單(依賴於文件系統的功能)