web-dev-qa-db-fra.com

Exporter Blob de la base de données MySQL vers un fichier avec uniquement SQL

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?

25
suicide

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 *
14
ajreal

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.

19
Shaun Hare