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