| 特性 | VARCHAR | CHAR |
|---|---|---|
| 儲存長度 | 實際資料長度 (1-8000/MAX) | 固定定義長度,不足右補空白 |
| 範例 | 定義 VARCHAR(40) 存 'Bill Gates' (10 字元) → 取出長度 10 | 定義 CHAR(40) 存 'Bill Gates' → 取出長度 40 (尾部 30 空白) |
| 空間效率 | 高,僅佔用實際長度 + 2 位元組長度前綴 | 低,固定佔用定義長度 |
| 應用建議 | 可變長度資料 (姓名、地址、描述) 優先使用 | 固定長度代碼 (身分證字號、ISO 國家代碼、MD5 雜湊) 適合 |
<TEXTAREA> 內容適合儲於此類型。VARCHAR(MAX) (非 Unicode) / NVARCHAR(MAX) (Unicode),支援索引、大值型別溢位儲存、完整查詢功能。| 類型 | 範圍 | 儲存位元組 | 適用場景 |
|---|---|---|---|
| TINYINT | 0 ~ 255 | 1 | 狀態碼、小範圍計數、布林替代 |
| SMALLINT | -32,768 ~ 32,767 | 2 | 中小範圍整數、年份、排序號 |
| INT | -2,147,483,648 ~ 2,147,483,647 | 4 | 通用整數、主鍵 Identity、外鍵 |
| BIGINT | -2^63 ~ 2^63-1 | 8 | 極大整數、高頻序號、時間戳毫秒 |
原則:選擇能容納最大可能值的最小類型,節省空間、提升快取命中率、減少 I/O。修改類型代價高,設計時預留成長空間。
NUMERIC(p, s) 或 DECIMAL(p, s)p (Precision) = 總位數 (1-38),s (Scale) = 小數位數 (0 ≤ s ≤ p)。| 類型 | 範圍 | 小數位 | 儲存位元組 |
|---|---|---|---|
| SMALLMONEY | -214,748.3648 ~ 214,748.3647 | 4 | 4 |
| MONEY | -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 | 4 | 8 |
內部為整數儲存 (隱含 4 位小數),運算速度快於 NUMERIC,但精度固定 4 位,跨幣別匯率運算時需注意轉換。
FLOAT(n):n=1-24 為 REAL (4 位元組,7 位有效數字);n=25-53 為 DOUBLE PRECISION (8 位元組,15 位有效數字)。| 類型 | 範圍 | 精度 | 儲存位元組 | 備註 |
|---|---|---|---|---|
| DATETIME | 1753-01-01 ~ 9999-12-31 | 3.33 毫秒 | 8 | 傳統通用型 |
| SMALLDATETIME | 1900-01-01 ~ 2079-06-06 | 1 分鐘 | 4 | 已棄用 |
| DATE | 0001-01-01 ~ 9999-12-31 | 1 天 | 3 | SQL 2008+ 新增,僅日期 |
| TIME | 00:00:00.0000000 ~ 23:59:59.9999999 | 100 奈秒 | 3-5 | SQL 2008+ 新增,僅時間 |
| DATETIME2 | 0001-01-01 ~ 9999-12-31 | 100 奈秒 | 6-8 | SQL 2008+ 推薦替代 DATETIME |
| DATETIMEOFFSET | 含時區位移的 DATETIME2 | 100 奈秒 | 8-10 | SQL 2008+ 跨時區應用 |
BITTINYINT/SMALLINT/INT/BIGINTNUMERIC(p,s) 或 MONEYFLOATDATE/TIME/DATETIME2/DATETIMEOFFSET (2008+) 或 DATETIME (舊版)VARCHAR(N) / NVARCHAR(N) / VARCHAR(MAX)CHAR(N) / NCHAR(N)VARCHAR(MAX) / NVARCHAR(MAX) (勿用 TEXT/NTEXT)