MySQL バイナリデータの格納と取得(ver4.0.24にて確認)

今日のmysql-user-jaメーリングリストで"example.pdf"等のバイナリデータをMySQL4.0.xに格納できないで困っている方がいたのでこちらでも確認してみた.

メーリングリストに投稿されいた方の環境はver4.0.23でそれと同じバージョンで確認しようとしたがver4.0.23が本家アーカイブにUPされておらず,やむなく最新版のver4.0.24にて確認.

結論から言うと問題なし.使う上でのポイントは以下.

  • ユーザはFile権限を持っている必要がある
  • mysqldプロセスがアクセスできるようにOSのファイル権限が適切にしてある
  • max_allowed_packet以上のサイズのファイルは扱えないので,大きいファイルの場合この変数を大きくしておく(デフォルト1MBくらい)
  • create table t1 (c1 int primary key, c2 longblob not null)
  • insert into t1 values (1, load_file('D:\\a.pdf')) ←\がエスケープされるので2個書く
  • select c2 into dumpfile 'D:\\b.pdf' from t1 where c1=1 ←outfileではなくdumpfileを使う

とりあえずMySQLのPDF版マニュアル,"manual-a4.pdf"(約8MB)を格納し,それから別のファイル名で取得するのをやってみた.