2011-01-10 187 views
20

我有一張表格,圖像數據存儲在MySQL數據庫的blob字段中。有沒有辦法通過僅使用SQL將這些圖像導出到文件系統上的文件?這些圖片應該命名爲{imageId} .jpg從MySQL數據庫導出Blob到只有SQL的文件

我知道使用Java或其他方法很容易做到這一點,但只需要一個SQL腳本就可以做到這一點?

+0

這可能取決於用戶MySQL是否運行在有文件系統的寫訪問權限。 – 2011-01-10 12:03:44

+0

當然,但它甚至有可能嗎?因爲我還沒有看過SQL命令來訪問fielsystem – suicide 2011-01-10 12:12:00

回答

12

我不喜歡這個主意......

drop procedure if exists dump_image; 
delimiter // 
    create procedure dump_image() 
    begin 

    declare this_id int; 
    declare cur1 cursor for select imageId from image; 
    open cur1; 
     read_loop: loop 
     fetch cur1 into this_id; 
     set @query = concat('select blob_field from image where imageId=', 
      this_id, ' into outfile "/tmp/xyz-', this_id,'.jpg"'); 
     prepare write_file from @query; 
     execute write_file; 
     end loop; 
    close cur1; 
    end // 
delimiter ; 

儘管錯誤

 
mysql> call dump_image(); 
ERROR 1329 (02000): No data - zero rows fetched, selected, or processed 
ls -1 /tmp/xyz*
+0

你在哪裏設置了`this_id`?你沒有傳入任何東西,它沒有在proc中設置,所以查詢將失敗。否則,這看起來像它會工作 – 2011-01-10 12:50:24

15

假設你有寫權限的用戶mysql中的位置要存儲的文件,你可以這樣做:

Select id,blob into dumpfile '/tmp/path' from table; 

不幸的是,在MySQL中不可能將轉儲文件指定爲表達式/變量。但是,如果將其包裝在存儲過程中並使用變量,則可以實現此目的。

相關問題