首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 五大核心資料類型詳解:字元、文字、數值、邏輯、日期時間

     編輯:關於SqlServer

一、字元型

VARCHAR vs CHAR

特性VARCHARCHAR
儲存長度實際資料長度 (1-8000/MAX)固定定義長度,不足右補空白
範例定義 VARCHAR(40) 存 'Bill Gates' (10 字元) → 取出長度 10定義 CHAR(40) 存 'Bill Gates' → 取出長度 40 (尾部 30 空白)
空間效率高,僅佔用實際長度 + 2 位元組長度前綴低,固定佔用定義長度
應用建議可變長度資料 (姓名、地址、描述) 優先使用固定長度代碼 (身分證字號、ISO 國家代碼、MD5 雜湊) 適合

二、文字型

TEXT (已棄用,建議用 VARCHAR(MAX)/NVARCHAR(MAX))

  • 儲存超過 20 億字元 (2GB) 的大型字串。
  • 無長度屬性,資料通常為空或極大。
  • HTML <TEXTAREA> 內容適合儲於此類型。
  • 缺點:體積大、速度慢、濫用拖慢伺服器、佔用大量磁碟空間。
    寫入任何資料 (含 NULL) 即自動配置 2KB 頁面,刪除記錄前無法回收。
  • 現代替代:VARCHAR(MAX) (非 Unicode) / NVARCHAR(MAX) (Unicode),支援索引、大值型別溢位儲存、完整查詢功能。

三、數值型

整數家族

類型範圍儲存位元組適用場景
TINYINT0 ~ 2551狀態碼、小範圍計數、布林替代
SMALLINT-32,768 ~ 32,7672中小範圍整數、年份、排序號
INT-2,147,483,648 ~ 2,147,483,6474通用整數、主鍵 Identity、外鍵
BIGINT-2^63 ~ 2^63-18極大整數、高頻序號、時間戳毫秒

原則:選擇能容納最大可能值的最小類型,節省空間、提升快取命中率、減少 I/O。修改類型代價高,設計時預留成長空間。

精確數值:NUMERIC / DECIMAL (同義)

  • 語法:NUMERIC(p, s) 或 DECIMAL(p, s)
  • p (Precision) = 總位數 (1-38),s (Scale) = 小數位數 (0 ≤ s ≤ p)。
  • 範圍:-10^38+1 ~ 10^38-1,遠超 INT/BIGINT。
  • 適用:財務金額、精確測量、任何不能有捨入誤差的計算。

貨幣型:MONEY / SMALLMONEY

類型範圍小數位儲存位元組
SMALLMONEY-214,748.3648 ~ 214,748.364744
MONEY-922,337,203,685,477.5808 ~ 922,337,203,685,477.580748

內部為整數儲存 (隱含 4 位小數),運算速度快於 NUMERIC,但精度固定 4 位,跨幣別匯率運算時需注意轉換。

近似數值:FLOAT / REAL

  • FLOAT(n):n=1-24 為 REAL (4 位元組,7 位有效數字);n=25-53 為 DOUBLE PRECISION (8 位元組,15 位有效數字)。
  • 適用:科學計算、統計模型、不需精確等值比較的場景。
  • 禁忌:不可用於財務金額、等值比較 (WHERE float_col = 1.23 可能失效)。

四、邏輯型

BIT

  • 儲存 0、1 或 NULL。
  • SQL Server 優化:單一資料表最多 8 個 BIT 欄位合併儲存於 1 位元組,9-16 個佔 2 位元組,以此類推。
  • 適用:True/False、Yes/No、Enabled/Disabled 旗標。

五、日期時間型

類型範圍精度儲存位元組備註
DATETIME1753-01-01 ~ 9999-12-313.33 毫秒8傳統通用型
SMALLDATETIME1900-01-01 ~ 2079-06-061 分鐘4已棄用
DATE0001-01-01 ~ 9999-12-311 天3SQL 2008+ 新增,僅日期
TIME00:00:00.0000000 ~ 23:59:59.9999999100 奈秒3-5SQL 2008+ 新增,僅時間
DATETIME20001-01-01 ~ 9999-12-31100 奈秒6-8SQL 2008+ 推薦替代 DATETIME
DATETIMEOFFSET含時區位移的 DATETIME2100 奈秒8-10SQL 2008+ 跨時區應用

選型決策樹

  1. 是否為真/假旗標?→ BIT
  2. 是否為整數?→ 依最大值選 TINYINT/SMALLINT/INT/BIGINT
  3. 是否為精確小數 (金額)?→ NUMERIC(p,s) 或 MONEY
  4. 是否為科學近似值?→ FLOAT
  5. 是否為日期/時間?→ DATE/TIME/DATETIME2/DATETIMEOFFSET (2008+) 或 DATETIME (舊版)
  6. 是否為可變長度字串?→ VARCHAR(N) / NVARCHAR(N) / VARCHAR(MAX)
  7. 是否為固定長度代碼?→ CHAR(N) / NCHAR(N)
  8. 是否為超大文本?→ VARCHAR(MAX) / NVARCHAR(MAX) (勿用 TEXT/NTEXT)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved