我想使用我的軟件的前端存儲圖像和.docx/.doc,.pptx/.ppt,.pdf文件。我不明白如何實現這個以及如何將BLOB和CLOB文件插入到表中。請幫忙。如何在MySQL中插入BLOB和CLOB文件?
我使用的是Kubuntu 11.04,MySQL5,Qt 4.7.3。
我想使用我的軟件的前端存儲圖像和.docx/.doc,.pptx/.ppt,.pdf文件。我不明白如何實現這個以及如何將BLOB和CLOB文件插入到表中。請幫忙。如何在MySQL中插入BLOB和CLOB文件?
我使用的是Kubuntu 11.04,MySQL5,Qt 4.7.3。
兩種方式:
1 - 使用LOAD_FILE功能 -
INSERT INTO table1 VALUES(1, LOAD_FILE('data.png'));
2 - 將文件作爲十六進制字符串,例如 -
INSERT INTO table1 VALUES
(1, x'89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082');
INSERT INTO table1 VALUES(1, LOAD_FILE(data.png));
不會工作,但
INSERT INTO table1 VALUES(1, LOAD_FILE('data.png'));
應該(假設data.png在本地目錄中存在)
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_packet字節。如果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日,這個工作對我來說:
chown mysql:mysql /tmp/yourfile
「secure_file_priv」提示保存了我的一天。使用 'mysql> SELECT @@ secure_file_priv;'查看實際值 –
或者你可以只使用MySQL工作臺,選擇該行,最後一行,插入一行沒有一滴,然後只需點擊右鍵並選擇「負載值從文件」 。
甲第三選項是靠近第二一個和讀爲INSERT INTO table1的值(1,0x89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082);'。 – glglgl
以下不起作用: INSERT INTO table1 VALUES(1,LOAD_FILE(data.png)); – user1411472
檢查文件是否存在,檢查路徑,檢查文件大小,或多或少是max_allowed_packet。你有FILE特權嗎?什麼類型的BLOB字段,足以存儲文件? – Devart