MySQLでのファイル保存
ソフトウェア開発部のKです。
最近、MySQLへファイル(バイナリデータ)を保存しようとしてハマった箇所があるので記事にしてみようと思います。
MySQLに限りませんが、データベースにファイルを保存しようとすると、BINARY型やBLOB型といったデータ型を使用する必要があります。
そこで、まず単純にBLOB型でテーブルを作り、テストコードでファイルをコミットしてみました。
しかし、失敗します。
他のSQLServerなどでは同じコードでコミットできていたので、問題はデータベースです。
さらに何度か試行したところ、サイズの小さなファイルだと成功することがわかりました。
それでMySQLのマニュアルを調べたところ、デフォルトではデータベースとやりとりするパケットのサイズに制限があり、大きなファイルだとエラーになることがわかりました。
制限を変更するには、my.ini にある max_allowed_packet の値を変えればOKです。
値を変えたところ、問題なくファイルを保存することができました。
あっさりと書きましたが、実はこの原因を調べるのに結構時間が掛かってます。
そして、あとからふと思ってシステムログを見たところ、そのものズバリなエラーメッセージが出ていて、これを見ていたらすぐわかったのに……と脱力しました。
ログの大切さを改めて感じました。