1. ホーム
  2. mysql

画像を直接データベースに格納するか、base64データとして格納するか?

2023-09-30 05:11:42

質問

画像をデータベースに格納する一般的な方法は、画像を base64 のデータに変換してから保存することです。この処理により、サイズが33%増加します。別の方法として、画像を直接 BLOB ;例えば

$image = new Imagick("image.jpg");
$data = $image->getImageBlob();
$data = $mysqli->real_escape_string($data);
$mysqli->query("INSERT INTO images (data) VALUES ('$data')");

で画像を表示し

<img src="data:image/jpeg;base64,' .  base64_encode($data)  . '" />

後者の方法では、1/3の記憶容量を節約することができます。なぜ、画像を base64 として保存するのが一般的なのはなぜですか?

UPDATEしてください。 画像をデータベースに格納することの利点と欠点については多くの議論があり、ほとんどの人は実用的な方法ではないと考えています。とにかく、ここでは画像をデータベースに格納することを想定し、そのための最適な方法を議論しています。

どのように解決するのですか?

  • Pro base64です。 の場合、扱うエンコードされた表現はかなり安全な文字列です。制御文字も引用符も含まれていません。後者の点はSQLインジェクションの試みに有効です。SQLクエリ文字列に値を追加するだけなら問題はないだろう。

  • プロBLOBです。 データベースマネージャーソフトウェアは、どのような種類のデータを想定しているかを知っています。そのために最適化することができます。もしあなたがTEXTフィールドにbase64を格納するなら、そのためにインデックスや他のデータ構造を構築しようとするかもしれません。そしてそれは、バイト数で言えば、より小さい表現なのです。