2017年8月25日 星期五

[SQL] char, varchar, nchar, nvarchar, ntext

  • 資料庫中可設定字串格式有 char、varchar、nchar、nvarchar 和 ntext,這些格式有何差異
    • char
      • char 存儲定長數據很方便
      • char 欄位上的索引效率級高,如:定義 char(10)那麼不論存儲的數據是否達到了 10 個字節,都要占去 10 個字節的空間
        1. 儲存空間:n Byte
        2. 使用建議:確認一定長度,且只會有英數字
    • var (varchar, nvarchar)
      • 意思是可變動,因欄位長度可變動,所以會額外花費 2Byte 去儲存地址
      • varchar:可變動長度的 char
        1. 儲存空間:(n + 2) Byte  --2Byte記錄地址
        2. 使用建議:長度可變動,且可能會用非英數以外的字元
      • nvarchar:可變動長度的 nchar
        1. 儲存空間:(2 * n + 2) Byte --2Byte記錄地址
        2. 使用建議:長度可變動,且只會有英數字
    • n (nchar, nvarchar)
      • 支援 UNICODE UCS-2 字元,因為萬國編碼(支援中文字),所以 1 字儲存2Byte
      • nchar:固定長度的char
        1. 儲存空間:(2 * n) Byte
        2. 使用建議:確認一定長度,且可能會用非英數以外的字元
      • nvarchar:可變動長度的 nchar
        1. 儲存空間:(2 * n + 2) Byte --2Byte記錄地址
        2. 使用建議:長度可變動,且只會有英數字
    • ntext
      • 可變長度的 UNICODE UCS-2 字元
      • 最大長度為 2^30 - 1 (1,073,741,823) 個字元
      • UNICODE UCS-2 字元,使用 nchar、nvarchar 和 ntext 資料型別來儲存
        1. 資料內容包含的 UNICODE UCS-2 字元個數並不一致 (最多為 4,000),使用 nvarchar
        2. 資料內容每個項目的長度是固定 (最多為 4,000 個 UNICODE UCS-2 字元),請使用 nchar
        3. 若資料行的任何項目長度超過 4,000 個 UNICODE 字元,則使用 ntext

沒有留言:

張貼留言