2019年10月4日 星期五

資料庫型態 CHAR、NCHAR、VARCHAR差異說明

關於資料庫儲存”字”的型態,我們都知道有好幾種
這些跟”字”有關的型態,差別在哪裡
char、nchar、varchar 、nvarchar這幾個是我們常見用來儲存字的欄位型態
有n、沒n
n表示Unicode→無論英文、數字、中文…每個字都占2Bytes
所以較占空間 , 但可以存較難(少見)的字元,比如中文的”淼”之類
有var沒var
var表示欄位大小可變動的意思,依據實際存進的字串長度變動。
char 跟nchar
1. char和varchar每個欄位用1byte
2. 欄位大小無法依據實際儲存字串長度變動
3. 當你所存的字數不足你宣告欄位的最大空間時,剩下的空間會被空白字元塞滿
例如:
假設你為一個欄位宣告char(8)型態,存入ab兩個字,剩下6個欄位會被空白字元塞滿
所存的字會變成ab_ _ _ _ _ _。當你在程式碼中用”ab”和此欄位儲存的字做比較時,就會出現錯誤,因為資料庫中儲存的字後面多了一串空白,因為會判定和”ab”是不相等的。
所以一般建議只有存英文或數字,且你非常清楚知道只會用到幾個欄位的時候,才宣告char
nchar和nvarchar
1. nchar和nvarchar每個欄位用2byte
2. 欄位大小依據實際儲存字串長度變動
3. 當你所存的字數不足你宣告欄位的最大空間時,剩下的空間不會被空白字元塞滿
一個中文字因為需用掉2 bytes,所以在char和varchar的形態下,會占用2個欄位(可參考後面例子)
nchar和nvarchar的形態下只占用1個欄位
綜合比較 (儲存”嗨hello”字串)
用char(10)儲存:
會用掉10個欄位、占用10bytes,儲存的字為:嗨hello_ _ _ _ ,後面會有4個欄位塞滿空白
用varchar(10)儲存:
用掉7個欄位,hello用掉5個+嗨用掉2個。占用7bytes
用nchar(10)儲存:
用掉10個欄位,占用20bytes,儲存的字為:嗨hello_ _ _ _ ,後面會有4個欄位塞滿空白
用nvarchar(10)儲存:
用掉6個欄位,嗨hello每個字個用掉一個欄位。占用12bytes

沒有留言:

張貼留言