資料表設計
CREATE TABLE test_media (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(20),
movie LONGBLOB -- 或 MEDIUMBLOB (16MB 上限)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
匯入檔案 (伺服器端檔案路徑)
INSERT INTO test_media (id, name, movie)
VALUES (1, 'titanic', LOAD_FILE('/tmp/good.mp4'));
關鍵限制與注意事項 ⚠️
LOAD_FILE() 要求:
① 檔案在資料庫伺服器本機
② secure_file_priv 允許該目錄 (或未設定)
③ 檔案大小 < max_allowed_packet (預設 4MB,需調大)
④ 執行帳戶需有 FILE 權限
- LONGBLOB 上限 4GB,但受限於
max_allowed_packet 與記憶體
- 資料庫體積暴增,備份/還原/複制極慢,強烈不建議生產環境直接存大檔
生產環境推薦架構
- 檔案存儲於對象儲存 (S3/MinIO/OSS) 或分散式檔案系統
- 資料庫僅存:
file_path、file_hash、mime_type、size、metadata
- 應用層簽名 URL 下載/上傳,資料庫不經手二進位流
若必須資料庫存儲 (小檔案/嵌入式場景)
- 調大參數:
max_allowed_packet=256M, innodb_log_file_size
- 使用
COMPRESS() 儲存壓縮後資料,讀取時 UNCOMPRESS()
- 定期
OPTIMIZE TABLE 整理碎片