2011-01-10 12 views
20

Ich habe eine Tabelle mit Bilddaten in einem Blob-Feld in einer MySQL-Datenbank gespeichert. Gibt es eine Möglichkeit, diese Bilder mit nur SQL in Dateien im Dateisystem zu exportieren? Die Bilder sollten den Namen {imageId} .jpg habenExportieren Blob von MySQL-Datenbank in Datei mit nur SQL

Ich weiß, dass es einfach ist, dies mit Java oder was auch immer zu tun, aber ist es mit nur einem SQL-Skript möglich?

+0

Das hängt wahrscheinlich davon ab, ob der Benutzer MySQL unter Schreibzugriff auf das Dateisystem läuft oder nicht. –

+0

Natürlich, aber ist es überhaupt möglich? Weil ich keinen SQL-Befehl zum Zugriff auf das fielsystem gesehen habe – suicide

Antwort

12

ich die Idee nicht gefällt ...

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 ; 

Trotz der Fehler

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

Wo hast du 'this_id' gesetzt? Sie haben nichts übergeben und es ist nicht im Proc gesetzt, also wird die Abfrage fehlschlagen. Sonst sieht das so aus, als würde es funktionieren –

+0

mit dem Cursor 'fetch cur1 in this_id;' – ajreal

+3

Zustimmen mag nicht die Idee selbst, Sie müssen sehr vorsichtig sein, um die Sicherheit etc. Aber elegent Lösung - outfile im Gegensatz zu dumpfile führte zu eine beschädigte Datei für mich –

15

Sie Unter der Annahme, Schreibrechte als mysql Benutzer in der Lage Sie speichern möchten die Dateien, die Sie tun können:

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

Leider ist es in MySQL nicht möglich, die Dumpdatei als Ausdruck/Variable anzugeben. Sie können dies jedoch erreichen, wenn Sie es in eine gespeicherte Prozedur einschließen und Variablen verwenden.

+1

Es scheint, dass '' dumpfile' 'anstatt' outfile' bei serialisierten Java-Objekten hilft. –

+0

Sie haben recht, es scheint, dass DUMPFILE besser funktioniert als outfile – rasputino

Verwandte Themen