
【1】定義一個char[10]和一個varchar[10],存進去的是‘csdn’
char 的長度是不可變的,那么 char 所占的長度依然為10,除了字符 ‘csdn’ 外,后面跟六個空格,去空格用Trim 。
varchar 的長度是可變的,那么 varchar 所占的長度為4,就是 ‘csdn’,后面無空格。
因為長度固定, char的存取數度還是要比varchar要快得多,方便程序的存儲與查找;但是char 多余的空格占位符付出的是空間的代價,可謂是以空間換取時間效率,而varchar是以空間效率為首位的。
【2】有 var 前綴的,表示是實際存儲空間是變長的,varchar,nvarchar
所謂定長就是長度固定的,當輸入的數據長度沒有達到指定的長度時將自動以英文空格在其后面填充,使長度達到相應的長度;而變長字符數據則不會以空格填充,比較例外的是,text存儲的也是可變長。
【3】n 表示 Unicode 字符,即所有字符都占兩個字節,nchar,nvarchar
實例理解
【1】char(n) 和 varchar(n),n 為字節數
char(n)
char(4):4 是代表字節數,一個漢字代表一個字符,2個字節;一個英文代表一個字符,一個字節。現在我們假如存儲‘abcd’(4個字節,所以可以存儲),再假如存儲‘中國你好’(8個字節,所以不能存儲),再假如存儲‘ab’(由於是有四個字節,而現在ab只占兩個字節,所以用兩個空格補上后面的兩個字節,所以數據庫的數據為‘ab ’)
varchar(n)
varchar(4):假如存儲‘abcd’(4個字節,所以可以存儲),再假如存儲‘中國你好’(8個字節,所以不能存儲),再假如存儲‘ab’(由於是有四個字節,而現在ab只占兩個字節,然而varchar(n)是由var開頭的,數據是可變的,所以不用像char(4),用空格補字節的方法,而是可以直接省略空格,所以數據庫的數據還是‘ab’)
【2】nchar(n)和nvarchar(n)
我們先弄清楚以n開頭的數據類型是什么意思,已n開頭表示此字符是unicode編碼的格式,不是以n開頭的自然不是unicode編碼格式。我們在前面說過,括號里面的n是代表字節數,而在這里,由於是unicode編碼格式,所以n代表2n個字節數,同樣以上面的例子舉例
nchar(n)
nchar(4),既然是unicode編碼格式並且不是可變的,所以總共可以存儲2*4=8個字節,我們現在假如存儲‘ab’(由於是只占四個字節,所以在數據庫中的數據為‘ab ’),ab后面的四個字節空格補齊,假如存儲‘中國你好’(則完全可以存放)
nvarchar(n)
既然是unicode編碼且為可變的,所以存儲‘abcd’(在數據庫中的數據為‘abcd’,不會再補空格)