MySQL BLOB(Binary Large Object)家族存儲二進制數據(圖片、音頻、文件流),分四級;SQL Server 無 BLOB 關鍵字,統稱「大型對象 LOB 類型」。本文對比兩者體系、存儲上限、適用場景。
一、 MySQL BLOB 四級對照
| 類型 | 最大長度 | 典型場景 |
| TINYBLOB | 255 字節 | 極小二進制片段、圖標 |
| BLOB | 64 KB (65,535) | 縮略圖、小文檔、配置二進制 |
| MEDIUMBLOB | 16 MB (16,777,215) | 普通圖片、音頻片段、PDF |
| LONGBLOB | 4 GB (4,294,967,295) | 高清視頻、大文件、備份鎖像 |
- 存儲開銷:長度前綴 1/2/3/4 字節 + 數據本體。
BLOB 列無字符集、按字節比較排序;TEXT 列有字符集、按字符排序。
- 建議:數據庫只存路徑/對象鍵,實體文件放對象存儲(S3/MinIO/OSS),僅極小、高頻、強一致性場景直存 BLOB。
二、 SQL Server LOB 類型
| 類型 | 最大長度 | 備註 |
| VARBINARY(MAX) | 2 GB | 推薦二進制存儲替代 IMAGE |
| VARCHAR(MAX) | 2 GB | 非 Unicode 文本 |
| NVARCHAR(MAX) | 1 GB 字符 (2 GB 字節) | Unicode 文本 |
| XML | 2 GB | 結構化文檔 |
| IMAGE / TEXT / NTEXT | 2 GB | ⚠️ 已棄用,僅向後兼容 |
SQL Server LOB 數據存放於專用 LOB_DATA 分配單元,行內僅存 24 字節根指針。
三、 關鍵差異對比
| 維度 | MySQL BLOB | SQL Server LOB |
| 最大單值 | 4 GB (LONGBLOB) | 2 GB (MAX 類型) |
| 字符集綁定 | 無(二進制) | VARCHAR/NVARCHAR 綁定編碼 |
| 存儲結構 | InnoDB 頁內/溢出頁 | 行溢出數據 + LOB_DATA 頁 |
| 流式讀寫 | 支持 | 支持 (.Read()/.Write()) |
四、 最佳實踐
- 對象存儲優先:數據庫存
bucket/key,應用簽名直傳/下載。
- 必存庫內:用
MEDIUMBLOB 覆蓋 90% 場景,LONGBLOB 謹慎用(備份/還原極慢)。
- 避免 SELECT *:含 BLOB 列會導致緩存池污染、網絡暴增。
- 索引策略:BLOB 列不能建索引,只能建前綴索引(無實際意義),業務查詢走關聯表元數據列。
BLOB 是「核武器」,用得對是核心資產,用錯是性能炸彈。
- 上一篇文章: MySQL 學習筆記(三):字符串長度函數 LENGTH vs CHAR_LENGTH 實測對比
- 下一篇文章: MySQL CHAR vs VARCHAR 選型指南:存儲引擎差異、空間換時間、InnoDB 最佳實踐
Copyright ©
程式碼之家 All Rights Reserved