画像を直接データベースに格納するか、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を格納するなら、そのためにインデックスや他のデータ構造を構築しようとするかもしれません。そしてそれは、バイト数で言えば、より小さい表現なのです。
関連
-
SQLException。オペランドは1列でなければなりません。
-
Mysqlデータベースへのリンク時にpymysqlがConnection refusedエラーを報告する
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] div 内の画像を縦に並べる方法
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] base64文字列をエンコード、デコードするにはどうしたらいいですか?
-
[解決済み] HTMLでBase64画像を表示する方法
-
[解決済み】Node.jsでBase64エンコードを行うにはどうすればよいですか?
-
[解決済み】JavaScriptで文字列をBase64にエンコードするにはどうすればいいですか?
-
[解決済み】PNG画像をサーバーサイドで保存する方法(base64データのURIから)。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLのデータバックアップにmysqldumpを使用する方法
-
MySQL サービスとデータベース管理
-
mysqlのデータ圧縮性能比較 詳細
-
MySQLによる既存テーブルのパーティショニングの実装
-
MySQL XAが分散型トランザクションを実装する方法を1記事にまとめました。
-
[解決済み] [GROUP BY句に含まれるか、集約関数で使用される必要があります。
-
Mysqlデータベースへのリンク時にpymysqlがConnection refusedエラーを報告する
-
MySQLの起動エラー:ERROR 2003 (HY000)。localhost'上のMySQLサーバーに接続できない(10061)
-
mysql がエラーを報告します。不明な文字セットです。'utf8mb4'
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?