2011-01-10 5 views
20

Ho una tabella con i dati di immagine memorizzati in un campo BLOB in un database MySQL. Esiste un modo per esportare tali immagini sui file sul filesystem usando solo SQL? Le immagini dovrebbero essere denominate {imageId} .jpgEsportazione di BLOB dal database MySQL su file con solo SQL

So che è facile farlo con Java o altro, ma è possibile solo con uno script SQL?

+0

Questo probabilmente dipende dal fatto che l'utente MySQL eseguito abbia o meno accesso in scrittura al filesystem o meno. –

+0

Certo, ma è anche possibile? Perché non ho visto un comando SQL per accedere al fielsystem – suicide

risposta

12

Non mi piace l'idea ...

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 ; 

Nonostante l'errore

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

Dove hai impostato 'this_id'? Non hai inserito nulla, e non è impostato nel proc, quindi la ricerca fallirà. Altrimenti sembra che funzionerebbe –

+0

usando il cursore 'fetch cur1 in this_id;' – ajreal

+3

Accetto non mi piace l'idea da solo, è necessario essere molto attenti alla sicurezza re ecc. Ma una soluzione elegante - come il file di prova per il dumpfile ha portato a un file corrotto per me –

15

si Supponendo che hanno il permesso di scrittura come l'utente mysql nella posizione che si desidera memorizzare i file, puoi fare:

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

Sfortunatamente, in MySQL non è possibile specificare il dumpfile come espressione/variabile. Tuttavia, è possibile ottenere questo risultato se lo si avvolge in una stored procedure e si usano variabili.

+1

Sembra che l'uso di un file 'dumpfile' invece di' outfile' aiuti con oggetti Java serializzati. –

+0

Hai ragione, sembra che DUMPFILE funzioni meglio di outfile – rasputino