| 類型 | 儲存空間 | 範圍 | 精度/小數位 | 適用場景 |
|---|---|---|---|---|
| bit | 1 Byte (每 8 欄位) | 0, 1, NULL | — | 布爾旗標、狀態位 |
| tinyint | 1 Byte | 0 ~ 255 | — | 極小計數、枚舉代碼 |
| smallint | 2 Bytes | -32,768 ~ 32,767 | — | 年齡、年份、中小計數 |
| int | 4 Bytes | -2,147,483,648 ~ 2,147,483,647 | — | 通用 ID、外鍵、計數器 |
| bigint | 8 Bytes | -9.22e18 ~ 9.22e18 | — | 大數據量主鍵、時間戳毫秒 |
| decimal / numeric | 5-17 Bytes (視精度) | -10^38+1 ~ 10^38-1 | 精度 1-38, 小數位 0-38 | 金額、價格、比率、精確計算 |
| money | 8 Bytes | -922,337,203,685,477.5808 ~ +922,337,203,685,477.5807 | 固定 4 位小數 | 貨幣金額 (舊系統相容) |
| smallmoney | 4 Bytes | -214,748.3648 ~ +214,748.3647 | 固定 4 位小數 | 小額貨幣 |
| 類型 | 空間 | 範圍 | 精度 | 備註 |
|---|---|---|---|---|
| float(n) | 4/8 Bytes | ±1.79e308 | n=1-24 → 4 Bytes (7 位有效數字) n=25-53 → 8 Bytes (15 位有效數字) | 科學計算、圖形座標、非精確測量 |
| real | 4 Bytes | ±3.40e38 | 7 位有效數字 | float(24) 同義詞 |
| 類型 | 空間 | 範圍 | 精度 | 時區感知 | 備註 |
|---|---|---|---|---|---|
| datetime | 8 Bytes | 1753-01-01 ~ 9999-12-31 | 3.33 毫秒 | 否 | 舊版通用、範圍較窄 |
| datetime2(n) | 6-8 Bytes | 0001-01-01 ~ 9999-12-31 | 100 奈秒 (n=7) | 否 | 推薦新系統使用、範圍更大、精度更高 |
| smalldatetime | 4 Bytes | 1900-01-01 ~ 2079-06-06 | 1 分鐘 | 否 | 已棄用建議 |
| date | 3 Bytes | 0001-01-01 ~ 9999-12-31 | 天 | 否 | 純日期 (生日、截止日) |
| time(n) | 3-5 Bytes | 00:00:00 ~ 23:59:59.9999999 | 100 奈秒 | 否 | 純時間 (工時、班次) |
| datetimeoffset(n) | 8-10 Bytes | 同 datetime2 + 時區位移 | 100 奈秒 | 是 | 跨時區系統、全球化應用 |
| 類型 | 最大長度 | 儲存開銷 | Unicode | 適用場景 |
|---|---|---|---|---|
| char(n) | 8,000 字元 | n 位元組 (固定) | 否 | 定長代碼 (ISO、郵遞區號、MD5) |
| varchar(n) | 8,000 字元 | 實際長度 + 2 位元組 | 否 | 變長文字、名稱、描述 |
| varchar(max) | 2 GB (2^31-1 字元) | 實際長度 + 2 位元組 (大值溢出存儲) | 否 | 長文本、JSON、XML |
| text | 2 GB | 已棄用,請用 varchar(max) | 否 | 舊系統維護 |
| nchar(n) | 4,000 字元 | 2n 位元組 (固定) | 是 (UTF-16) | 定長多語言代碼 |
| nvarchar(n) | 4,000 字元 | 2 × 實際長度 + 2 位元組 | 是 | 變長多語言文字、通用推薦 |
| nvarchar(max) | 2 GB | 2 × 實際長度 + 2 位元組 | 是 | 長多語言文本 |
| ntext | 2 GB | 已棄用,請用 nvarchar(max) | 是 | 舊系統維護 |
| 類型 | 最大長度 | 儲存開銷 | 適用場景 |
|---|---|---|---|
| binary(n) | 8,000 位元組 | n 位元組 (固定) | 固定長二進位 (UUID、雜湊、加密金鑰) |
| varbinary(n) | 8,000 位元組 | 實際長度 + 2 位元組 | 變長二進位 (檔案片段、圖片縮圖) |
| varbinary(max) | 2 GB | 實際長度 + 2 位元組 | 大型二進位物件 (BLOB、檔案儲存) |
| image | 2 GB | 已棄用,請用 varbinary(max) | 舊系統維護 |
| 類型 | 空間 | 說明 | 適用場景 |
|---|---|---|---|
| uniqueidentifier | 16 Bytes | GUID (NEWID()/NEWSEQUENTIALID()) | 分散式主鍵、合併複寫 |
| timestamp / rowversion | 8 Bytes | 資料庫級遞增二進位數、自動更新、不可手動修改 | 樂觀鎖版本號、資料列變更追蹤 |
| sql_variant | 視基礎類型 | 可儲存除 text/ntext/image/timestamp/sql_variant 外任意類型 | 極少用、動態屬性包 (EAV 模式) |
| xml | 2 GB | 原生 XML 支援、結構驗證、XQuery/XPath 索引 | XML 文檔儲存與查詢 |
| cursor | — | 游標參數/變數專用 | 預存程序游標傳遞 |
| table | — | 表值參數/變數、記憶體優化表類型 | 批次傳遞參數、暫存結果集 |
| hierarchyid | 視深度 | 樹狀結構編碼 (CLR 類型) | 組織架構、分類樹、檔案系統路徑 |
| geometry / geography | 視複雜度 | 平面/球面空間資料 (CLR 類型、OGC 標準) | GIS 應用、位置服務、空間索引 |
當兩個運算元進行算術運算 (+, -, *, /) 時,結果類型遵循以下優先順序與精度推導:
result_p = max(s1, s2) + max(p1-s1, p2-s2) + 1,result_s = max(s1, s2),上限 38result_p = p1 + p2 + 1,result_s = s1 + s2,上限 38result_p = p1 - s1 + s2 + max(6, s1 + p2 + 1),result_s = max(6, s1 + p2 + 1),上限 38| 語意 | MySQL | SQL Server | 遷移注意 |
|---|---|---|---|
| 自增整數 | BIGINT AUTO_INCREMENT | BIGINT IDENTITY(1,1) | 語法不同,種子/增量可配置 |
| 精確金額 | DECIMAL(19,4) | DECIMAL(19,4) / MONEY | MONEY 固定 4 位小數、隱含貨幣語意 |
| UTC 時區感知 | TIMESTAMP | DATETIMEOFFSET | TIMESTAMP 範圍到 2038 年,DATETIMEOFFSET 完整支援 |
| Unicode 字串 | VARCHAR(N) CHARSET utf8mb4 | NVARCHAR(N) | SQL Server 雙字節固定,MyUTF8 變長 1-4 字節 |
| 大文本 | LONGTEXT | NVARCHAR(MAX) | 儲存機制不同 (溢出頁 vs LOB) |
| GUID | CHAR(36) / BINARY(16) | UNIQUEIDENTIFIER | SQL Server 原生函數 NEWSEQUENTIALID() 利於索引 |
| JSON | JSON | NVARCHAR(MAX) + ISJSON/JSON_VALUE | MySQL 原生 JSON 類型、支援索引、部分更新 |