Perl (mod_perl) で日本語を利用するために binmode STDOUT, “:encoding(utf8)”; をしていたが、これがネックになって今度は バイナリデータを出力する際に変換が起きてしまっていた。
バイナリを出力する前に binmode STDOUT, “:raw”; を怠らずに。
また、MySQL のデータベースに、ある程度のサイズのデータを放り込もうとする際には max_allowed_packet のサイズに気をつける必要がある。初期値は1Mになっているので、my.cnf の中に書かれているその値を変更する。
変更後のMySQLサーバーの再起動を忘れずにする(mysqladminで reload ではなく、shutdownしてから再起動。)ことと、mod_perl による運用では、Perlスクリプト中で SET max_allowed_packet=8M などとしても反映されないことに注意。