char、nvarchar和varchar區別

這3種字符串數據類型是使用最多的,那麼在數據庫設計時到底該怎麼使用呢?
首先先來分析3個數據類型的說明:
1。char
CHAR的長度是固定的,最長2000個字符。
2。varchar 和 varchar2
可以肯定的是oracle中目前是可以使用varchar數據類型的,但他們的區別我查了不少資料也沒有找到一個準確的答案 最常見的說話是說oracle中的varchar只是varchar2的別名也就是同義詞。
其次也有人認爲varchar是最大長度爲2000的可變字符串(和sql server中的varchar一致),而varchar2最大長度爲4000。 下面討論下使用的區別:
1.char和varchar、varchar2
由於varchar和varchar2用途類似,我們先來討論char和他們的使用區別:
varchar和varchar2比char節省空間,在效率上比char會稍微差一些,即要想獲得效率,就必須犧牲一定的空間,這也就是我們在數據庫設計上常說的‘以空間換效率’。
  varchar和varchar2雖然比char節省空間,但是如果一個varchar和varchar2列經常被修改,而且每次被修改的數據的長度不同,這會引起‘行遷移’(Row Migration)現象,而這造成多餘的I/O,是數據庫設計和調整中要盡力避免的,在這種情況下用char代替varchar和varchar2會更好一些。
當然還有一種情況就是象身份證這種長度幾乎不變的字段可以考慮使用char,以獲得更高的效率。
2。varchar和varchar2
這裏就進入重點了,前面的區別我們在sql server中我們已經基本瞭解了,大家可能都知道,最多也就是複習下 ,但oracle增加了一個varchar2類型,是大家以前所沒有用到過的。
因爲oracle保證在任何版本中該數據類型向上和向下兼容,但不保證varchar,還有其他數據中一般都有varchar這個數據類型。
所以得出了以下結論:
如果想在oracle新版本的數據庫兼容就不要用varchar,如果想和oracle之外其他數據庫兼容就不要用varchar2。
=================================================

nvarchar 和 varchar 的區別是存儲方式不同
varchar是按字節存儲的.而帶"n"的nvarchar是按字符存儲的
比如說 varchar(40),能存儲40個字節長度的字符,存儲中文字符的時候,因爲中文字符1個字符就等於2個字節.所以varchar(40)只能存儲20箇中文字符.
nvarchar(40),就可以存儲40箇中文字符,也就是說可以存儲80個字節長度的字符.nvarchar要相對於存儲的字符類型.比如有些字符是佔3個字節的.
同樣的,char和nchar也一樣道理。
char是定長的,也就是當你輸入的字符小於你指定的數目時,char(8),你輸入的字符小於8時,它會再後面補空值。當你輸入的字符大於指定的數時,它會截取超出的字符。

varchar是變長型,它的存儲空間會跟你輸入的實際字符數而改變,但最大長度不能超過你指定的長度。

nvarchar是unicode的變長型,它和char的區別很明顯了,它和varchar的區別主要是存儲空間大,相同長度下能容內更多的字符。
字符集是在安裝 SQL Server 時選擇的,不能更改。使用 Unicode 數據類型,列可存儲由 Unicode 標準定義的任何字符,包含由不同字符集定義的所有字符。Unicode 數據類型需要相當於非 Unicode 數據類型兩倍的存儲空間。

Unicode 數據使用 SQL Server 中的 nchar、varchar 和 ntext 數據類型進行存儲。對於存儲來源於多種字符集的字符的列,可採用這些數據類型。當列中各項所包含的 Unicode 字符數不同時(至多爲 4000),使用 nvarchar 類型。當列中各項爲同一固定長度時(至多爲 4000 個 Unicode 字符),使用 nchar 類型。當列中任意項超過 4000 個 Unicode字符時,使用 ntext 類型。
nvarchar(n):
包含 n 個字符的可變長度 Unicode 字符數據。n 的值必須介於 1 與 4,000 之間。字節的存儲大小是所輸入字符個數的兩倍。所輸入的數據字符長度可以爲零。

 varchar[(n)]:
長度爲 n 個字節的可變長度且非 Unicode 的字符數據。n 必須是一個介於 1 和 8,000 之間的數值。存儲大小爲輸入數據的字節的實際長度,而不是 n 個字節。所輸入的數據字符長度可以爲零。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章