• ベストアンサー

SQLiteに画像を格納したい

作りたいと思っているシステムは、テキストと画像をDBに格納し、編集と削除ができるような簡単なデータベースのようなものです。 そこで、DBにはSQLiteを使おうと思っているのですが、調べてみたところSQLiteに画像を格納するのはあまりよくない(できない?ややこしい?)というような記事などを目にしました。 実際のところはどうなのか、ということをお聞きしたいです。 画像はただ単純にサーバーにアップロードするような方法が望ましいのでしょうか。 どなたかご返答頂ければと思います。 どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

php掲示板なので、phpから使うと仮定して答えますと、 php5.1以降であれば、SQLite3.0以降には、PDO関数を利用してデータベース接続出来るので、PDOのラージオブジェクトを利用して画像のファイルハンドルから直接バイナリーデータを入れることが出来ます。 取り出しは、そのまま、バイナリー文字列で取り出されるので、前後によけいな出力をせず、headerで適切なmimeタイプを指定すれば、echo $lob; でブラウザに画像表示出来ます。 私もまだ、マニュアル見ながらのコーディングですが、結構簡単にいけましたよ。 参考 http://jp.php.net/manual/ja/pdo.lobs.php あと、既に指摘されていますが、問題は、SQLiteは1データベース1ファイルなので、一つのtableに大きな画像を大量に取り込むと、データベース用ファイルが凄く肥大化して、そのデータベースの他の操作も全て凄く時間が掛かってしまうようになるということでしょうか。

参考URL:
http://jp.php.net/manual/ja/pdo.lobs.php

その他の回答 (2)

回答No.2

以下はSQLite3についてのアドバイスです。 SQLite2には当てはまりませんのでご注意ください。 どういった環境で使うかに依存すると思います。 SQLiteはCライブラリとして提供されていますが、直接Cから使う限りバイナリを格納することは難しくありません。 バイナリを読み書きするための機構があるからです。 しかし、その他の言語から使用する場合、また、C/C++から使う場合でもラッパーをかます場合などは、この限りではありません。 その言語、ラッパーライブラリの仕様に依存します。 ほかに考慮しなければいけないのは、データベースの大きさです。 一般に画像データは大きいため、すぐにデータベースが大きくなってしまいます。 残念ながら現在のSQLiteはデータベースファイルの大きさそのものに性能が影響を受けてしまいます。 どの程度の大きさまでなら大丈夫か一概に論じることはできないのですが、数GBというのが一つの節目にはなると思います。

  • warez
  • ベストアンサー率57% (29/50)
回答No.1

バイナリデータでも特に問題はないと思いますが。気になるなら Base64 などでエンコードすればどうでしょう。

関連するQ&A