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

SQL Server 資料類型完整圖鑑:系統與使用者定義類型深度解析

     編輯:關於SqlServer

資料類型定義了欄位、預存程序參數與區域變數的資料特徵,決定儲存格式並代表不同資訊類型。SQL Server 將資料類型分為系統資料類型(內建)與使用者定義資料類型(基於系統類型擴充)兩大類。本文系統整理各類型特性、分類、宣告語法與實戰注意事項。

系統資料類型分類總覽

SQL Server 系統資料類型對照表

1. 二進制類型

儲存原始位元組資料(如檔案流、雜湊值、加密輸出),字元範圍 0-9、A-F/a-f,以 0x 前綴標識,每兩字元為一位元組(如 0xF5)。

類型語法長度範圍儲存特性
定長binary[(n)]1-8,000 位元組固定佔用 n 位元組,不足右補 0x00,超長截斷
變長varbinary[(n)]1-8,000 位元組 / max 至 2 GB實際長度 + 2 位元組開銷,超長截斷
DECLARE @v1 binary(10) = 0x10FFAA;      -- 實際儲存 0x10FFAA00000000000000
DECLARE @v2 varbinary(64) = 0x10FFAA;   -- 實際儲存 0x10FFAA(3 位元組)
長度參數 n 的預設值陷阱:
  • 宣告變數/定義欄位時省略 n → 預設 1 位元組
  • CONVERT/CAST 轉換時省略 n → 預設 30 位元組

2. 字元字串類型

輸入時須以單引號括住。同樣分定長與變長:

  • char[(n)]:定長,固定 n 位元組,不足右補空格
  • varchar[(n)]:變長,實際長度 + 2 位元組開銷
  • nchar/nvarchar:Unicode 版本,每字元 2 位元組,支援多國語系
  • max 指定子:最大 2 GB(varchar(max)、nvarchar(max))

3. 日期時間類型

類型儲存大小範圍精度建議用途
datetime8 位元組1753-01-01 ~ 9999-12-313.33 毫秒舊版相容
smalldatetime4 位元組1900-01-01 ~ 2079-06-061 分鐘輕量需求
date3 位元組0001-01-01 ~ 9999-12-311 天純日期(SQL 2008+)
time3-5 位元組00:00:00.0000000 ~ 23:59:59.9999999100 奈秒純時間(SQL 2008+)
datetime26-8 位元組0001-01-01 ~ 9999-12-31100 奈秒新開發首選
datetimeoffset8-10 位元組含時區位移100 奈秒跨時區應用

4. 整數類型

類型儲存大小範圍
bigint8 位元組-2^63 ~ 2^63-1
int4 位元組-2^31 ~ 2^31-1
smallint2 位元組-32,768 ~ 32,767
tinyint1 位元組0 ~ 255

5. 精確數值類型

適用財務、工程等不可容忍捨入誤差的場景:

  • decimal[(p[,s])] / numeric[(p[,s])](兩者同義)
  • p(精度):有效數字總位數(1-38)
  • s(小數位數):小數點右邊位數(0-p)
  • 儲存大小隨精度變化:1-9 位→5 位元組,10-19→9,20-28→13,29-38→17

6. 近似數值類型

科學計算、浮點運算,有捨入誤差:

  • float[(n)]:n 為位元精度(1-53),1-24 相當 real(4 位元組,7 位有效數字),25-53 為 float(8 位元組,15 位有效數字)
  • real:float(24) 別名

7. 貨幣類型

類型儲存大小範圍小數位
money8 位元組-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807固定 4 位
smallmoney4 位元組-214,748.3648 ~ 214,748.3647固定 4 位
⚠️ 貨幣類型實際為整數除以 10,000 實作,大量運算時精度優於 float,但除法運算仍可能產生捨入,財務系統建議改用 decimal(19,4)。

8. 位元類型

  • bit:僅儲存 0 或 1,任何非零輸入視為 1
  • 單欄 1 位元,但資料表中 8 個 bit 欄位合併儲存為 1 位元組

9. 時間戳記 / Rowversion

  • timestamp(同義 rowversion):資料庫唯一、自動遞增的二進制數,不儲存日期時間
  • 每次資料列更新自動重新產生,用於樂觀並發控制與資料同步
  • 每張表僅能擁有一個 timestamp 欄位

10. 大型物件類型(LOB)

類型用途輸入格式最大長度備註
text大量非 Unicode 文字單引號括住2 GB已淘汰,改用 varchar(max)
ntext大量 Unicode 文字單引號括住1 GB 字元已淘汰,改用 nvarchar(max)
image二進位大物件(圖片、檔案)0x 前綴2 GB已淘汰,改用 varbinary(max)

識別碼命名規則

  1. 長度 1-128 字元(舊版 30 字元限制已放寬)
  2. 首字元須為字母、_、@、#:
    • @ 開頭:區域變數/參數
    • # 開頭:暫存物件(單 # 區域暫存,雙 ## 全域暫存)
  3. 後續字元可為字母、數字、_、@、$、#
  4. 預設不允許空格與保留關鍵字,但可用雙引號 " 或方括號 [] 包住定義特殊識別碼(需 QUOTED_IDENTIFIER ON)

選型建議速查表

場景推薦類型避免使用
主鍵/身分識別int / bigint + IDENTITYuniqueidentifier(除非分散式)
金額/匯率/精確計算decimal(19,4) 或更高精度float/real/money
一般字串(新專案)nvarchar(n) / nvarchar(max)char/varchar(除非純 ASCII 高效能)
日期時間(新專案)datetime2 / date / timedatetime/smalldatetime
布林旗標bittinyint/char(1)
大型文字/文件nvarchar(max) / varchar(max)text/ntext
二進位檔案/圖片varbinary(max)image
樂觀並發/版本戳rowversiondatetime 模擬
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved