2011-01-10 3 views
20

Mam tabelę z danymi obrazu przechowywanymi w polu blob w bazie danych MySQL. Czy istnieje sposób na wyeksportowanie tych obrazów do plików w systemie plików przy użyciu tylko SQL? Obrazy powinny mieć nazwę {imageId} .jpgEksportowanie Bloba z bazy danych MySQL do pliku tylko z SQL

Wiem, że łatwo jest to zrobić z Javą lub czymkolwiek innym, ale czy jest to możliwe za pomocą skryptu SQL?

+0

Prawdopodobnie zależy to od tego, czy użytkownik MySQL działa w trybie zapisu ma dostęp do systemu plików czy nie. –

+0

Oczywiście, ale czy to nawet możliwe? Ponieważ nie widziałem polecenia SQL, aby uzyskać dostęp do fielsystem – suicide

Odpowiedz

12

nie podoba mi się pomysł ...

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 ; 

Pomimo błędu

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

Gdzie ustawiłeś 'this_id'? Nic nie przekazałeś, a to nie jest ustawione w proc, więc zapytanie się nie powiedzie. W przeciwnym razie wygląda na to, że zadziała –

+0

używając kursora 'pobierz cur1 do this_id;' – ajreal

+3

Zgadzam się, sam nie podoba mi się ten pomysł, musisz być bardzo ostrożny w kwestii bezpieczeństwa itp. Ale eleganckie rozwiązanie - outfile jako przeciwieństwo dumpfile doprowadziło do uszkodzony plik dla mnie –

15

zakładając, że masz uprawnienia do zapisu jako użytkownik mysql w miejscu, które chcesz przechowywać pliki, możesz zrobić:

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

Niestety, w MySQL nie można określić pliku dumpfile jako wyrażenia/zmiennej. Można to jednak osiągnąć, jeśli zapakujesz ją w procedurę przechowywaną i użyjesz zmiennych.

+1

Wydaje się, że używając 'dumpfile' zamiast' outfile' pomaga z serializowanych obiektów Java. –

+0

Masz rację, wygląda na to, że DUMPFILE działa lepiej niż plik wyjściowy – rasputino

Powiązane problemy