擴充套件總結
筆者今天在閱讀乙份資料庫設計時觀察到表中大量使用了nvarchar這一型別,發現自己對nvarchar了解的太少,比如它是什麼型別,和varchar的區別,為什麼這份資料庫設計中多次使用到它,有什麼優點和缺點
在這裡,把自己找尋答案的過程記錄下來
nvarchar(n)是包含n個字元的可變長度unicode字元資料。n的值必須介於1與4000之間。位元組的儲存大小是所輸入字元個數的兩倍。所輸入的資料字元長度可以為零。
nvarchar在儲存時,無論全形還是半形,每個字元都占用兩個位元組。在定義時,無論全形或是半形,都是定義字元個數而不是位元組數。最多顯示4000個字元。是unicode標準字符集。這時再回顧一下unicode字元編碼集
unicode字符集:字元中,英文本元只需要乙個位元組儲存就足夠了,但漢字和其他眾多非英文本元,則需要兩個位元組儲存。如果英文與漢字同時存在,由於占用空間數不同,導致讀取出來的字串是亂碼。unicode字符集就是為了解決字符集這種不相容的問題而產生的,它所有的字元都用兩個位元組表示,即英文本元也是用兩個位元組表示。
我發現可以把char、nchar、varchar、nvarchar四種型別放在一起對比看看。
char、nchar是定長,如果沒達到指定的長度時將自動以英文空格在其後面填充。優勢在於速度較高。
varchar、nvarchar屬於變長,如果沒有達到指定的長度時,不會自動以英文空格在其後面填充。優勢在於佔容量較小。
前面也說到了unicode字符集的優勢,解決了英文和漢字同時存在時的亂碼現象。
nvarchar的最大值是4000,varchar的最大值是8000.
如nvarchar(10),就是unicode字元占用10個位元組。那麼無論是英文還是漢字,都只能存5個。
資料型別
描述char(n)
定長,索引效率高,程式裡使用trim去除多餘的空白,n必須是乙個介於1和8000之間的數值,儲存大小為n個位元組
varchar(n)
變長,時間效率沒char高,空間分配靈活,n必須時乙個介於1和8000之間的數值。儲存大小為輸入資料的位元組的實際長度,而不是n個位元組
text(n)
變長,非unicode資料
nchar(n)
定長,處理unicode資料型別(所有的字元都使用兩個位元組表示),n的值必須介於1和4000之間。儲存大小為n位元組的兩倍
nvarchar(n)
變長,處理unicode資料型別(所有的字元都使用兩個位元組表示),n的值必須介於1和4000之間。位元組的儲存大小是所輸入字元個數的兩倍。所輸入的資料字元長度可以為零
ntext(n)
變長,處理unicode資料型別(所有的字元都使用兩個位元組表示)
那麼實際開發中,如何選擇更好呢:
有人說,varchar比nvarchar更省空間,應該更多的用varchar。但筆者認為應該結合實際應用環境,當空間足夠時不必太糾結於空間。還有考慮到作業系統基本上內部解析都適用unicode編碼的,使用了nvarchar便可以避免嗎每次從資料庫讀取或寫入的時候進行編碼轉換,轉換需要時間,並很容易出錯。且nvarchar支援多種語言,所以我猜想這便是筆者正在看的資料庫設計文件中設計者大量選用nvarchar的理由之一。
char varchar和nvarchar的區別
1.char 適用於長度固定,一般不含中文的情況。char區分中英文,英文佔1個位元組,中文佔2個位元組。比如 char 20 你只能插入20個字母或者10個漢字。即使你插入abc,不足20個位元組,資料庫也會在abc後自動插入17個空格補足20個位元組 2.varchar 適用於長度不固定,一般不...
Char Varchar和Nvarchar的區別
char和varchar這兩種型別是我們經常使用的資料型別,但是在使用的過程中也沒有特別的去注意他們有什麼樣的區別,nvarchar相對與char和varchar就不是很常用。通過一次技術的分享和在網際網路上查詢一些知識,讓我對這些數值型別有了深刻的認識。char 是計算機程式語言中只可容納單個字元...
NVARCHAR 和VARCHAR區別和使用
1 各自的定義 nvarchar n 包含 n 個字元的可變長度 unicode 字元資料。n 的值必須介於 1 與 4,000 之間。位元組的儲存大小是所輸入字元個數的兩倍。所輸入的資料字元長度可以為零。varchar n 長度為 n 個位元組的可變長度且非 unicode 的字元資料。n 必須是...