首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 直接儲存二進位檔案 (圖片/HTML) 實戰:BLOB 欄位、表單上傳與輸出顯示

     編輯:MySQL 資料庫相關知識

資料庫結構設計

CREATE DATABASE binary_data;
USE binary_data;

CREATE TABLE binary_data (
    id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    description CHAR(50),
    bin_data LONGBLOB,
    filename CHAR(50),
    filesize CHAR(50),
    filetype CHAR(50)
) ENGINE=InnoDB;
  • LONGBLOB:最大 4GB,適合圖片、文件、HTML 等二進位內容。
  • 記錄檔名、大小、MIME 類型,便於下載時設定正確 Header。

上傳存儲腳本 store.php

<?php
// store.php
if (isset($_POST['submit'])) {
    $conn = mysqli_connect("localhost", "root", "password", "binary_data");
    $data = addslashes(file_get_contents($_FILES['form_data']['tmp_name']));
    $sql = "INSERT INTO binary_data (description, bin_data, filename, filesize, filetype)
            VALUES ('{$_POST['form_description']}', '$data', '{$_FILES['form_data']['name']}', 
                    '{$_FILES['form_data']['size']}', '{$_FILES['form_data']['type']}')";
    mysqli_query($conn, $sql);
    $id = mysqli_insert_id($conn);
    echo "檔案已存儲,Database ID: $id";
    mysqli_close($conn);
} else {
?>
檔案描述:
選擇檔案:

讀取輸出腳本 getdata.php

<?php
// getdata.php?id=3
$id = (int)$_GET['id'];
$conn = mysqli_connect("localhost", "root", "password", "binary_data");
$sql = "SELECT bin_data, filetype FROM binary_data WHERE id=$id";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
header("Content-Type: {$row['filetype']}");
echo $row['bin_data'];
mysqli_close($conn);

前端引用範例

<img src="getdata.php?id=3" alt="資料庫圖片">
<a href="getdata.php?id=5">下載文件</a>

突破 1MB/24MB 限制配置

層級設定建議值
HTML 表單<input type="hidden" name="MAX_FILE_SIZE" value="...">24000000 (24MB)
PHP (php.ini)upload_max_filesize, post_max_size24M
MySQL 連線max_allowed_packet24M (啟動參數 --max_allowed_packet=24M)
MySQL 緩衝區key_buffer, table_cache, sort_buffer, record_buffer視記憶體調整

啟動命令範例:
/usr/local/bin/mysqld_safe -O key_buffer=16M -O table_cache=128 -O sort_buffer=4M -O record_buffer=1M -O max_allowed_packet=24M

效能與架構建議

  • 小檔案 (<1MB):資料庫存儲可接受,單一系統易備份遷移。
  • 大檔案/高併發:**強烈建議儲存於物件儲存 (S3/MinIO/NAS),資料庫僅存路徑/元資料**。
  • 資料庫存 Blob 會導致:備份極大、複製慢、緩存污染、複制延遲劇增。
  • 若必須資料庫存,考慮 **外部儲存引擎 (如 MySQL 8.0 + RocksDB) 或 分離 Blob 表 + 獨立複制鏈**。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved