In MySQL esiste un particolare tipo di dato che si presta ad sopitate grandi volumi di dati. Staimo parlando di BLOB (Binary Large data OBject). All’interno di un campo di tipo BLOB, ad esempio, è possibile archiviare oggetti come immagini, PDF o video.
La comodità di archiviare questo tipo di oggetti all’interno di un database può essere notevole tuttavia è bene considerare anche che l’utilizzo di campi BLOB porta ad un aumento esponenziale delle dimensioni del database (con possibili criticità, ad esempio, in caso di migrazione).
Utilizzare BLOB per archiviare immagini
Come detto un campo BLOB può essere utilizzato per archiviare immagini all’interno di un database MySQL.
Caricare immagini all’interno di un database
Per prima cosa, quindi, vediamo come caricare un’immagine all’interno di una ipotetica tabella "immagini":
INSERT INTO immagini (dati_immagine) VALUES (LOAD_FILE('/var/www/html/img/immagine.jpg'));
Come potete notare si tratta di una comune operazione di INSERT in cui il valore da inserire nel campo "dati_immagine" è restituito dal comando LOAD_FILE cui viene passato come argomento il percorso del file da importare.
Esportare un’immagine salvata in un database
Vedaimo ora come sia possibile esportare il contenuto di un campo di tipo BLOB e salvarlo sotto forma di immagne. Di seguito la query che consente di esportare questi dati e ricreare l’immagine originale:
SELECT dati_immagine FROM immagini WHERE id = 123 INTO DUMPFILE '/var/www/html/img/immagine.jpg';
Il valore utilizzato per la selezione del record mediante id – in questo caso "123" – è ovviamente arbitrario (potete utilizzare i criteri di selezione che preferite), quello che conta è l’introduzione del costrutto INTO DUMPFILE che permette di esportare il contenuto di un campo in un file di cui viene specificato il percorso fisico.
Campi BLOB e prestazioni
Naturalmente, maggiori saranno le dimensioni del file che si desidera archiviare, maggiori saranno i tempi di esecuzione necessari per il completamento dell’INSERT, lo stesso discorso, vale anche per quanto riguarda la grandezza dei dati da esportare tramite la SELECT.
Come detto all’inizio di questo articolo l’utilizzo di campi BLOB, nonostante l’indiscussa utilità, deve essere valutato attentamente in quanto può avere ricadute in termini di prestazioni e di "maneggevolezza" dei dati.