Recentemente fiz manutenção em um sistema de helpdesk que grava arquivos em tabelas do banco de dados. Eu particularmente acredito que a prática seja uma péssima idéia, pois aumenta o tamanho do banco consideravelmente e deixa-o lento, além de que existem sérias limitações do MySQL para o trabalho com os arquivos.
O problema foi que, ao anexar arquivos maiores que 1MB, o site não conseguia mais exibir o arquivo para download (isso quando se conseguia fazer o upload desses arquivos). Com uma breve pesquisa pude notar que, por limitações do protocolo web e devido à configuração do MySQL uma query tem limitações de trabalho com tamanhos grandes de arquivos.
O problema foi resolvido quando alterei uma variável do MySQL que indica qual o tamanho máximo que uma única query poderá ter. Por padrão o tamanho pode vir limitado para preservar a memória utilizada pelo BD. Essa variável pode ser exibida com o comando:
show variables like ‘%max_allowed_packet%’
A variável pode ser alterada com o comando:
set max_allowed_packet = 16000000
.