web-dev-qa-db-ja.com

MySQLに画像を保存できますか

可能性のある重複:
MySQLの画像
MySQLに画像を保存する

登録の一環としてユーザーが画像をアップロードするWebサイトを開発しようとしています。画像ごとに、PHP(それほど難しくない)で作成されたサムが必要です。親指を(非常に小さいため)データベースに保存し、MySQLを使用します。 (親指をドライブ上の物理ファイルとして保存したくありません。)
MySQLは画像データの保存と取得を許可していますか?画像データをサポートしていない場合、無料のデータベースはありますか?リンクを提供できれば幸いです。
ありがとう。

112
afaolek

はい、データベースに画像を保存できますが、私の意見ではお勧めできませんし、一般的な慣行でもありません。

一般的な方法は、ファイルシステム上のディレクトリに画像を保存し、データベースへの画像への参照を保存することです。例えばまたは、コンテンツ配信ネットワーク(CDN)または物理的なテリトリーの大きな広がりにある多数のホストに画像を保存し、データベース内のそれらのリソースにアクセスするための参照を保存することもできます。

画像は1MBを超える非常に大きくなる可能性があります。したがって、データベースに画像を保存すると、データベースと、データベースとWebサーバーが異なるホスト上にある場合にそれらのネットワークに不必要な負荷がかかる可能性があります。

私は、40万人以上の従業員を抱える新興企業、中規模企業、大規模テクノロジー企業で働いてきました。私の13年間のプロの経験では、データベースに画像を保存する人を見たことがありません。私はこれが珍しい習慣である声明を支持するために言っています。

222
FinalForm

Blobとして保存する必要があります。mysqlのLONGBLOBデータ型は機能します。

例:

CREATE TABLE 'test'.'pic' (
    'idpic' INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    'caption' VARCHAR(45) NOT NULL,
    'img' LONGBLOB NOT NULL,
  PRIMARY KEY ('idpic')
)

他の人が言ったように、それは悪い習慣ですが、それを行うことができます。ただし、このコードがうまくスケールするかどうかはわかりません。

35
developerdoug

MySQLに画像をBLOBとして保存できます。ただし、これにはいくつかの理由で問題があります。

  • 画像の操作は難しくなる可能性があります。一括操作を実行するには、まずデータベースから画像を取得する必要があります。
  • データベース全体がRAMに保存される非常にまれな場合を除き、MySQLデータベースは最終的にディスクに保存されます。つまり、DBイメージはBLOBに変換され、データベースに挿入されてからディスクに保存されます。単にディスクに保存するだけで多くのオーバーヘッドを節約できます。

代わりに、テーブルを更新してimage_pathフィールドを追加することを検討してください。例えば:

ALTER TABLE `your_table`
ADD COLUMN `image_path` varchar(1024)

次に、イメージをディスクに保存し、イメージパスでテーブルを更新します。イメージを使用する必要がある場合は、指定されたパスを使用してディスクからイメージを取得します。

このアプローチの有利な副作用は、画像が必ずしもディスクに保存されないことです。画像パスの代わりにURLを簡単に保存し、インターネットに接続された任意の場所から画像を取得できます。

11
George Cummins

データベースに画像をBLOBとして保存する必要があります。

テーブル内にPHOTOという列を作成し、それをmediumblobとして設定します。

次に、次のようなフォームから取得します。

    $data = file_get_contents($_FILES['photo']['tmp_name']);

次に、列を$ dataの値に設定します。

もちろん、これは悪い習慣であり、おそらくユーザーアカウントに対応する名前でファイルをシステムに保存したいと思うでしょう。

5
bsimic