我有一个表,图像数据存储在MySQL数据库的blob字段中。有没有办法只使用SQL将这些图像导出到文件系统上的文件?图像应命名为{imageId} .jpg
我知道用Java或其他方法很容易做到这一点,但只用SQL脚本就可以了吗?
答案 0 :(得分:18)
Using INTO
,假设您在要存储文件的位置拥有mysql
用户的写入权限,则可以执行以下操作:
SELECT id, blob INTO DUMPFILE '/tmp/path' FROM table;
不幸的是,在MySQL中,无法将dumpfile指定为表达式/变量。但是,如果将它包装在存储过程中并使用变量,则可以实现此目的。
答案 1 :(得分:14)
我不喜欢这个主意......
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*