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

SQL Server CHAR vs VARCHAR 差異深度解析:定長與變長儲存特性

     編輯:關於SqlServer

核心差異

特性CHAR(n)VARCHAR(n)
儲存方式固定長度 n 字元實際長度 + 2 位元組長度前綴
資料短於 n右側填補空白不填補,僅存實際資料
資料長於 n截斷截斷
搜尋效能固定位移,略快需讀取長度前綴,微慢
儲存空間固定 n 位元組實際長度 + 2 bytes

重要行為:混用時的隱含轉換

若資料表**至少有一個 VARCHAR 欄位**,SQL Server 會將該表**所有 CHAR 欄位視為 VARCHAR 處理** (內部儲存格式轉為變長)。此為舊版相容行為,現代版本仍保留。

選型建議

  • 長度固定、極短 (1-10 字元)、高頻搜尋/Join:CHAR (如 ISO 代碼、性別旗標、狀態碼)。
  • 長度變動大、可能很長、在乎空間:VARCHAR (如備註、描述、JSON 片段)。
  • 需支援 Unicode:一律用 NCHAR/NVARCHAR。
  • 大型物件 (LOB):VARCHAR(MAX)/NVARCHAR(MAX) (取代舊 TEXT/NTEXT)。

效能實測提示

  • 定長欄位可讓資料列大小固定,減少頁分裂、利於索引掃描。
  • 但若大量 CHAR(2000) 實際只存 10 字元,空間浪費嚴重,反而拖慢 I/O。
  • 實測:CHAR(10) vs VARCHAR(10) 存 5 字元,查詢效能差異 < 1%,空間差異 2 倍。

遷移建議

-- 將 CHAR 改為 VARCHAR (資料不截斷)
ALTER TABLE T ALTER COLUMN C VARCHAR(20);
-- 若有索引需重建

總結:**預設用 VARCHAR**,僅在明確需要固定長度優勢 (極短、高頻、固定格式) 時選 CHAR。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved