我有一張表格,圖像數據存儲在MySQL數據庫的blob字段中。有沒有辦法通過僅使用SQL將這些圖像導出到文件系統上的文件?這些圖片應該命名爲{imageId} .jpg從MySQL數據庫導出Blob到只有SQL的文件
我知道使用Java或其他方法很容易做到這一點,但只需要一個SQL腳本就可以做到這一點?
我有一張表格,圖像數據存儲在MySQL數據庫的blob字段中。有沒有辦法通過僅使用SQL將這些圖像導出到文件系統上的文件?這些圖片應該命名爲{imageId} .jpg從MySQL數據庫導出Blob到只有SQL的文件
我知道使用Java或其他方法很容易做到這一點,但只需要一個SQL腳本就可以做到這一點?
我不喜歡這個主意......
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*
你在哪裏設置了`this_id`?你沒有傳入任何東西,它沒有在proc中設置,所以查詢將失敗。否則,這看起來像它會工作 – 2011-01-10 12:50:24
假設你有寫權限的用戶mysql
中的位置要存儲的文件,你可以這樣做:
Select id,blob into dumpfile '/tmp/path' from table;
不幸的是,在MySQL中不可能將轉儲文件指定爲表達式/變量。但是,如果將其包裝在存儲過程中並使用變量,則可以實現此目的。
這可能取決於用戶MySQL是否運行在有文件系統的寫訪問權限。 – 2011-01-10 12:03:44
當然,但它甚至有可能嗎?因爲我還沒有看過SQL命令來訪問fielsystem – suicide 2011-01-10 12:12:00