数据库中char varchar nchar nvarchar的区别
數(shù)據(jù)庫中char varchar nchar nvarchar的區(qū)別
? ? ? ? ? 我們在進(jìn)行數(shù)據(jù)庫的設(shè)計(jì)的時(shí)候,很多情況下表中的字段都是用的是字符串類型的數(shù)據(jù),其中就有四種選擇char varchar nchar nvarchar,我們該如何進(jìn)行?
? ? ? ? ? 四種類型的詳細(xì)說明
? ? ? ? ??char:固定長度,非Unicode字符數(shù)據(jù)(對英文(ASCII)字符占用1個(gè)字節(jié),對一個(gè)漢字占用2個(gè)字節(jié))。
? ? ? ? ??用來存儲定長數(shù)據(jù),長度為n個(gè)字節(jié),n的取值范圍為1至8,000,存儲大小是n個(gè)字節(jié)。
? ? ? ? ??varchar:可變長度,非Unicode字符數(shù)據(jù)(對英文(ASCII)字符占用1個(gè)字節(jié),對一個(gè)漢字占用2個(gè)字節(jié))。
? ? ? ? ??用來存儲變長數(shù)據(jù),長度為n的字節(jié),n的取值范圍為1至8,000,max指示最大存儲大小是2^31-1個(gè)字節(jié),存儲大小是輸入數(shù)據(jù)的實(shí)際長度加2個(gè)字節(jié),所輸入數(shù)據(jù)的長度可以為0個(gè)字符。
? ? ? ? ??nchar:固定長度,Unicode字符數(shù)據(jù)。
? ? ? ? ??n個(gè)字符,n值必須在1到4,000之間(含)。存儲大小為兩倍n字節(jié)。
? ? ? ? ??nvarchar:可變長度,Unicode字符數(shù)據(jù)。
? ? ? ? ??n個(gè)字符,n值在1到4,000之間(含)。max指示最大存儲大小為2^31-1字節(jié),存儲大小是所輸入字符個(gè)數(shù)的兩倍+2個(gè)字節(jié),所輸入數(shù)據(jù)的長度可以為0個(gè)字符。
? ? ? ? ??Unicode或非Unicode的區(qū)別
? ? ? ? ??非Unicode:char,varchar
? ? ? ? ??Unicode:nchar,nvarchar
? ? ? ? ??數(shù)據(jù)庫中,英文字符只需要一個(gè)字節(jié)存儲就足夠了,但漢字和其他眾多非英文字符,則需要兩個(gè)字節(jié)存儲,如果英文與漢字同時(shí)存在,由于占用空間數(shù)不同,容易造成混亂,導(dǎo)致讀取出來的字符串是亂碼。
? ? ? ? ??Unicode字符集就是為了解決字符集這種不兼容的問題而產(chǎn)生的,它所有的字符都用兩個(gè)字節(jié)表示,即英文字符也是用兩個(gè)字節(jié)表示。而前綴n就表示Unicode字符,比如nchar,nvarchar,這兩種類型使用了Unicode字符集。
? ? ? ? ??定長和變長的區(qū)別:
? ? ? ? ??定長:char,nchar
? ? ? ? ??變長:varchar,nvarchar
? ? ? ? ??定長就是長度固定,沒有var前綴的,當(dāng)要保存的數(shù)據(jù)長度不夠時(shí)將自動(dòng)在其后面填充英文空格,使長度達(dá)到相應(yīng)的長度。
? ? ? ? ??變長就是長度可變,有var前綴的,表示是實(shí)際存儲空間是動(dòng)態(tài)變化的,比如varchar,nvarchar變長字符數(shù)據(jù)則不會以空格填充。
? ? ? ? ??存儲容量上的區(qū)別:
? ? ? ? ??char,varchar:最多8000個(gè)英文,4000個(gè)漢字
? ? ? ? ??nchar,nvarchar:可存儲4000個(gè)字符,無論英文還是漢字
? ? ? ? ? 如果,長度超過了4000個(gè)字符,使用的是text文本類型。
? ? ? ? ??存儲效率上的區(qū)別:
? ? ? ? ??char,nchar:定長,速度快,占空間大,需處理
? ? ? ? ??varchar,nvarchar:變長,速度慢,占空間小,無需處理
? ? ? ? ??速度:這里的速度指的是存取的速度。
? ? ? ? ??處理:主要是對應(yīng)用程序來說的,如果使用char,nchar則需要用trim之類的函數(shù)把兩邊的空格去掉。
? ? ? ? ??一般來說
? ? ? ? ??如果純英文和數(shù)字,用char/varchar
? ? ? ? ??如果含有中文字符,nchar/nvarchar
總結(jié)
以上是生活随笔為你收集整理的数据库中char varchar nchar nvarchar的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。