Trabalhando com Imagens no MySQL
Nesta postagem veremos uma forma de se trabalha com o armazenamento de imagens no MySQL. Para isso devemos conhecer um pouco o tipo de dado BLOB.
Tipos de Campo Blob (Binary Large Object)
Os campos de tipo blob são campos criados para armazenar qualquer tipo de informação em formato binário dentro de uma tabela no banco de dados. Os campos BLOBs na verdade são campos do tipo TEXT sendo que o BLOB não são case-sensitive como os campos de tipo TEXT.
Restrições dos campos BLOB
- Não podem ser chaves primárias (excluindo Tinyblob);
- Não é possível usar os comandos GROUP e SORT com campos blob;
- São reconhecidos como um LONGVARCHAR para drivers ODBC.
No MySQL existem 4 definições de campos BLOBs, seguem elas:
- TINYBLOB - armazena 255 caracteres (8 bits) mais 1 de controle;
- BLOB - armazena até 16535 caracteres (16 bits) mais 2 de controle;
- MEDIUMBLOB - armazena até 16777216 caracteres (24 bits) mais 3 de controle;
- LONGBLOB - armazena até 4294967295 caracteres (32 bits) mais 4 de controle.
Criando uma tabela para armazenar imagens
1 2 3 4 5 6 |
CREATE TABLE fotos ( id int(11) NOT NULL auto_increment, foto mediumblob NOT NULL, tipo varchar(20) NOT NULL default '', PRIMARY KEY(id) ) ENGINE=InnoDB; |
Inserindo uma imagem na tabela
1 |
INSERT INTO fotos (id,foto) VALUES (1,LOAD_FILE("c:/tmpfotos/img01.jpg")); |
Note que utilizo o LOAD_FILE para buscar um arquivo no diretório c:/tmpfotos, ao executar o insert é salvo na base o binário da foto.
Selecionando e salvando em um Diretório
1 |
SELECT foto INTO OUTFILE "c:/tmpfotos/img02.jpg" FROM fotos WHERE id = 1; |
Para buscar e salvar a foto em um diretório verifique se o usuário tem permissão para gravar no mesmo, além de verificar senão existe um arquivo com o mesmo nome. Nos próximos posts uma demonstração com o php.