[SQL] char, varchar, nchar, nvarchar, ntext
- 資料庫中可設定字串格式有 char、varchar、nchar、nvarchar 和 ntext,這些格式有何差異
- char
- char 存儲定長數據很方便
- char 欄位上的索引效率級高,如:定義 char(10)那麼不論存儲的數據是否達到了 10 個字節,都要占去 10 個字節的空間
- 儲存空間:n Byte
- 使用建議:確認一定長度,且只會有英數字
- var (varchar, nvarchar)
- 意思是可變動,因欄位長度可變動,所以會額外花費 2Byte 去儲存地址
- varchar:可變動長度的 char
- 儲存空間:(n + 2) Byte --2Byte記錄地址
- 使用建議:長度可變動,且可能會用非英數以外的字元
- nvarchar:可變動長度的 nchar
- 儲存空間:(2 * n + 2) Byte --2Byte記錄地址
- 使用建議:長度可變動,且只會有英數字
- n (nchar, nvarchar)
- 支援 UNICODE UCS-2 字元,因為萬國編碼(支援中文字),所以 1 字儲存2Byte
- nchar:固定長度的char
- 儲存空間:(2 * n) Byte
- 使用建議:確認一定長度,且可能會用非英數以外的字元
- nvarchar:可變動長度的 nchar
- 儲存空間:(2 * n + 2) Byte --2Byte記錄地址
- 使用建議:長度可變動,且只會有英數字
- ntext
- 可變長度的 UNICODE UCS-2 字元
- 最大長度為 2^30 - 1 (1,073,741,823) 個字元
- UNICODE UCS-2 字元,使用 nchar、nvarchar 和 ntext 資料型別來儲存
- 資料內容包含的 UNICODE UCS-2 字元個數並不一致 (最多為 4,000),使用 nvarchar
- 資料內容每個項目的長度是固定 (最多為 4,000 個 UNICODE UCS-2 字元),請使用 nchar
- 若資料行的任何項目長度超過 4,000 個 UNICODE 字元,則使用 ntext
- 效能
- 因 var 需額外儲存地址,讀取時先去抓資料,比非 var 來的稍慢
- (char, nchar) > (varchar, nvarchar)
- 因 n 因為 1 字 2Byte,所以花費 2 倍儲存空間,因此讀取也有些許影響
- 從空間上考慮,用 varchar 合適;從效率上考慮用 char 合適,關鍵是根據實際情況找到權衡點
- REF :
沒有留言:
張貼留言