| 類型 | 長度範圍 | 儲存特性 | 適用場景 |
|---|---|---|---|
| char(n) | 1-8000 | **定長**,不足右補空格 | 固定長度代碼 (ISO 國碼、身分證字號) |
| varchar(n) | 1-8000 | **變長**,實際長度 + 2 位元組開銷 | 一般可變字串 |
| text | ≤ 2^31-1 字元 | LOB,行外儲存,**已淘汰** | 舊系統大文本,改用 varchar(max) |
| nchar(n) | 1-4000 | 定長 **Unicode (UTF-16)**,每字 2 位元組 | 固定長度多語言 |
| nvarchar(n) | 1-4000 | 變長 Unicode | **多語言首選**,含中文 |
| ntext | ≤ 2^30-1 字元 | Unicode LOB,**已淘汰** | 改用 nvarchar(max) |
關鍵差異:n* 類型**不分中英**,皆佔 2 位元組/字元;char/varchar 中文佔 2 位元組、英文 1 位元組。nvarchar(4000) 可存 4000 中文或 4000 英文;varchar(8000) 可存 8000 英文或 4000 中文。**現代開發預設用 nvarchar**,除非確定純 ASCII 且極度在意儲存空間。
| 類型 | 範圍 | 精度 | 儲存大小 |
|---|---|---|---|
| datetime | 1753-01-01 ~ 9999-12-31 | 3.33 毫秒 | 8 位元組 |
| smalldatetime | 1900-01-01 ~ 2079-06-06 | 1 分鐘 | 4 位元組 |
**SQL 2008+ 新類型** (強烈建議):date (3 位元組)、time(n) (3-5 位元組)、datetime2(n) (6-8 位元組、100ns 精度、範圍同 datetime)、datetimeoffset(n) (含時區)。
| 類型 | 範圍 | 大小 | 備註 |
|---|---|---|---|
| bigint | -2^63 ~ 2^63-1 | 8 位元組 | 大流水號、雪花 ID |
| int | -2^31 ~ 2^31-1 | 4 位元組 | **預設首選** |
| smallint | -32,768 ~ 32,767 | 2 位元組 | 狀態碼、小範圍計數 |
| tinyint | 0 ~ 255 | 1 位元組 | 布林擴充、極小枚舉 |
| bit | 0 / 1 / NULL | 1 位元 (8 欄位打包 1 位元組) | 真偽旗標 |
decimal(p, s)p (precision) = 總位數 (1-38),s (scale) = 小數位數 (0-p)| 類型 | 範圍 | 精度 | 備註 |
|---|---|---|---|
| float(n) | ±1.79E308 | n=1-24 (7 位數) / 25-53 (15 位數) | 預設 float(53) = double precision |
| real | ±3.40E38 | 7 位數 | 同義於 float(24) |
科學計算、工程數值可用;**財務、計價、比對嚴禁使用**。
選型口訣:
**字串** → 預設 nvarchar,定長用 nchar,大文本 nvarchar(max)。
**日期** → 新專案 datetime2/date/time。
**整數** → 預設 int,大號 bigint,旗標 bit。
**金額** → decimal(19,4) 或 decimal(38,10)。
**科學** → float。