2011-01-10 58 views
20

Tengo una tabla con datos de imagen almacenados en un campo blob en una base de datos MySQL. ¿Hay alguna manera de exportar esas imágenes a archivos en el sistema de archivos utilizando solo SQL? Las imágenes deben tener el nombre {imageId} .jpgExportación de Blob desde la base de datos MySQL a un archivo con solo SQL

Sé que es fácil hacer esto con Java o lo que sea, pero ¿es posible con solo un script SQL?

+0

Eso probablemente depende de si el usuario MySQL se ejecuta bajo o no tiene acceso de escritura al sistema de archivos o no. –

+0

Por supuesto, pero ¿es posible? Porque no he visto un comando SQL para acceder al sistema de campo – suicide

Respuesta

12

no me gusta la 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 ; 

A pesar del error

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

¿Dónde se configuró 'this_id'? No pasaste nada, y no está establecido en el proceso, por lo que la consulta va a fallar. De lo contrario, parece que funcionaría –

+0

usando el cursor 'fetch cur1 en this_id;' – ajreal

+3

Estoy de acuerdo, no me gusta la idea, debes ser muy cuidadoso con la seguridad, etc. Pero la solución elegent - archivo de salida como opuesto a dumpfile llevó a un archivo corrupto para mí –

15

Asumiendo que tienen permiso de escritura como el usuario mysql en la ubicación que desea guardar los archivos, usted puede hacer:

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

Desafortunadamente, en MySQL no es posible especificar el archivo de volcado como expresión/variable. Sin embargo, podría lograr esto si lo envolvió en un procedimiento almacenado y usa variables.

+1

Parece que usar un 'dumpfile' en lugar de' outfile' ayuda con los objetos de Java serializados. –

+0

Tienes razón, parece que DUMPFILE funciona mejor que Outfile – rasputino

Cuestiones relacionadas