J'ai une table avec des données d'image stockées dans un champ blob dans une base de données MySQL. Existe-t-il un moyen d'exporter ces images vers des fichiers sur le système de fichiers en utilisant uniquement SQL? Les images doivent être nommées {imageId} .jpg
Je sais qu'il est facile de le faire avec Java ou autre chose, mais est-ce possible avec juste un script SQL?
Je n'aime pas l'idée ...
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 ;
Malgré l'erreur
mysql> call dump_image (); ERREUR 1329 (02000): Aucune donnée - zéro ligne récupérée, sélectionnée ou traitée
ls -1/tmp/xyz *
en utilisant INTO
, et en supposant que vous avez l'autorisation d'écriture en tant qu'utilisateur mysql
à l'emplacement où vous souhaitez stocker les fichiers, vous pouvez faire:
SELECT id, blob INTO DUMPFILE '/tmp/path' FROM table;
Malheureusement, dans MySQL, il n'est pas possible de spécifier le fichier de vidage en tant qu'expression/variable. Cependant, vous pouvez y parvenir si vous l'enveloppez dans une procédure stockée et utilisez des variables.