請看錶:
char(n) | 定長 | 儲存ANSI字符 | 不足的補英文半角空格 | 索引效率高,程序裏面使用trim去除多餘空白 | n必須是介於1和8000之間的數值,儲存大小爲n個字節 |
nchar(n) | 定長 | 儲存Unicode字符 | 不足的補英文半角空格 | 處理unicode數據類型(所有的字符使用兩個字節表示) | n必須是介於1和4000之間的數值,儲存大小爲n字節的兩倍 |
varchar(n) | 變長 | 儲存ANSI字符 | 根據數據長度自動變化 | 效率沒char高 靈活 | n必須是介於1和8000之間的數值,儲存大小爲輸入數據字節的實際長度,而不n個字節。 |
nvarchar(n) | 變長 | 儲存Unicode字符 | 根據數據長度自動變化 | 處理unicode數據類型(所有的字符使用兩個字節表示) | n的值必須介於1與4000之間。儲存大小爲n字節的兩倍。 |
技巧:
確定了存儲的數據長度,而且不包括中文,可以選擇char類型。
確定了存儲的數據長度,但可能包括中文,可以選擇nchar類型。
不確定存儲的數據長度,存儲只有英文、數字的最好用varchar。
不確定存儲的數據長度,也有可能有中文,可以選擇nvarchar類型。
如果還爲了這個糾結,就直接看看後面的概括吧。
一般如果用到中文或者其它特殊字符,我就會使用n開頭的類型,否則的話直接使用var開頭的。
拓展:
Unicode是國際組織制定的可以容納世界上所有文字和符號的字符編碼方案。
因爲計算機只能處理數字,如果要處理文本,就必須先把文本轉換爲數字才能處理。,0 - 255被用來表示大小寫英文字母、數字和一些符號,這個編碼表被稱爲ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。
如果要表示中文,顯然一個字節是不夠的,至少需要兩個字節,而且還不能和ASCII編碼衝突,所以,中國製定了GB2312編碼,用來把中文編進去。
Unicode字符集就是爲了解決字符集這種不兼容的問題而產生的,它所有的字符都用兩個字節表示,即英文字符也是用兩個字節表示