JSON assume utf8, portanto, é incompatível com imagens, a menos que elas sejam codificadas de alguma forma.
Base64 é quase exatamente 8/6 vezes mais volumoso que o binário (BLOB). Pode-se argumentar que é facilmente acessível. 3000
bytes
torna-se cerca de 4000 bytes
. Todos deveriam ser capaz de aceitar códigos arbitrários de 8 bits, mas nem todo mundo o faz. Base-64 pode ser o melhor compromisso geral e mais simples para não ter que lidar com dados de 8 bits.
Como são "pequenos", eu os armazenaria em uma tabela, não em um arquivo. No entanto, eu os armazenaria em uma tabela separada e
JOIN
por um id
apropriado quando você precisar deles. Isso permite que as consultas que não precisam da imagem sejam executadas mais rapidamente porque não estão passando por cima dos BLOBs. Tecnicamente,
TEXT CHARACTER SET ascii COLLATE ascii_bin
faria, mas BLOB
torna mais claro que não há realmente nenhum texto utilizável na coluna.