2012-05-24 61 views
18

我想使用我的軟件的前端存儲圖像和.docx/.doc,.pptx/.ppt,.pdf文件。我不明白如何實現這個以及如何將BLOB和CLOB文件插入到表中。請幫忙。如何在MySQL中插入BLOB和CLOB文件?

我使用的是Kubuntu 11.04,MySQL5,Qt 4.7.3。

回答

23

兩種方式:

1 - 使用LOAD_FILE功能 -

INSERT INTO table1 VALUES(1, LOAD_FILE('data.png')); 

2 - 將文件作爲十六進制字符串,例如 -

INSERT INTO table1 VALUES 
    (1, x'89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082'); 
+2

甲第三選項是靠近第二一個和讀爲INSERT INTO table1的值(1,0x89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082);'。 – glglgl

+0

以下不起作用: INSERT INTO table1 VALUES(1,LOAD_FILE(data.png)); – user1411472

+1

檢查文件是否存在,檢查路徑,檢查文件大小,或多或少是max_allowed_pa​​cket。你有FILE特權嗎?什麼類型的BLOB字段,足以存儲文件? – Devart

1
INSERT INTO table1 VALUES(1, LOAD_FILE(data.png)); 

不會工作,但

INSERT INTO table1 VALUES(1, LOAD_FILE('data.png')); 

應該(假設data.png在本地目錄中存在)

11
INSERT INTO MY_TABLE(id, blob_col) VALUES(1, LOAD_FILE('/full/path/to/file/myfile.png') 

LOAD_FILE附加了很多條件。從MySQL documentation

LOAD_FILE(FILE_NAME)

讀取該文件,作爲一個字符串返回文件內容。要使用此功能,該文件必須位於服務器主機上,必須指定 指定文件的完整路徑名稱,並且您必須具有FILE 權限。該文件必須全部可讀,其大小小於 max_allowed_pa​​cket字節。如果secure_file_priv系統變量是 設置爲非空目錄名稱,則要加載的文件必須位於該目錄中的 。

如果由於 之前的條件之一不滿足而導致該文件不存在或無法讀取,則該函數返回NULL。

另外,在Linux中有LOAD_FILE的錯誤。有關該錯誤的信息,請參見http://bugs.mysql.com/bug.php?id=38403,有關解決方法,請參閱MySQL LOAD_FILE returning NULL。在Ubuntu 12.04中,MySQL 32年5月5日,這個工作對我來說:

  1. 複製文件到/ tmp
  2. 更改所有權轉讓給mysql用戶chown mysql:mysql /tmp/yourfile
  3. 登錄到MySQL作爲MySQL的root用戶,這樣你確定你有FILE權限
  4. 運行insert語句
+0

「secure_file_priv」提示保存了我的一天。使用 'mysql> SELECT @@ secure_file_priv;'查看實際值 –

3

或者你可以只使用MySQL工作臺,選擇該行,最後一行,插入一行沒有一滴,然後只需點擊右鍵並選擇「負載值從文件」 。