SQL Server數(shù)據(jù)類型char、nchar、varchar、nvarchar的區(qū)別淺析
在SQL Server中,當(dāng)我們設(shè)置字符型字段的時候,往往有很多個數(shù)據(jù)類型供我們選擇,如:char nchar varchar nvarchar等,那么我們到底應(yīng)該選擇哪一個呢?下面就一一來描述其區(qū)別。
char:固定長度,非Unicode字符數(shù)據(jù),長度為n個字節(jié)。n的取值范圍為1至8,000,存儲大小是n個字節(jié)。char的SQL2003同義詞為character。
varchar:可變長度,非Unicode字符數(shù)據(jù)。n的取值范圍為1至8,000。max指示最大存儲大小是2^31-1個字節(jié)。存儲大小是輸入數(shù)據(jù)的實際長度加2個字節(jié)。所輸入數(shù)據(jù)的長度可以為0個字符。SQL-2003中的varchar就是charvarying或charactervarying。
nchar:n個字符的固定長度的Unicode字符數(shù)據(jù)。n值必須在1到4,000之間(含)。存儲大小為兩倍n字節(jié)。nchar的SQL-2003同義詞為nationalchar和nationalcharacter。
nvarchar:可變長度Unicode字符數(shù)據(jù)。n值在1到4,000之間(含)。max指示最大存儲大小為2^31-1字節(jié)。存儲大小是所輸入字符個數(shù)的兩倍+2個字節(jié)。所輸入數(shù)據(jù)的長度可以為0個字符。nvarchar的SQL-2003同義詞為nationalcharvarying和nationalcharactervarying。
char,varchar:最多8000個英文,4000個漢字
nchar,nvarchar:可存儲4000個字符,無論英文還是漢字
char,nchar:定長,速度快,占空間大,需處理
varchar,nvarchar:變長,速度慢,占空間小,無需處理
定長就是長度固定的,當(dāng)輸入的數(shù)據(jù)長度沒有達(dá)到指定的長度時將自動以英文空格在其后面填充,使長度達(dá)到相應(yīng)的長度。
變長字符數(shù)據(jù)則不會以空格填充,比較例外的是,text存儲的也是可變長。
1、char。char存儲定長數(shù)據(jù)很方便,char字段上的索引效率級高,比如定義char(10),那么不論你存儲的數(shù)據(jù)是否達(dá)到了10個字節(jié),都要占去10個字節(jié)的空間,不足的自動用空格填充,所以在讀取的時候可能要多次用到Trim()。
2、varchar。存儲變長數(shù)據(jù),但存儲效率沒有char高。如果一個字段可能的值是不固定長度的,我們只知道它不可能超過10個字符,把它定義為varchar(10)是最合算的。varchar類型的實際長度是它的值的實際長度+1。為什么“+1”呢?這一個字節(jié)用于保存實際使用了多大的長度。從空間上考慮,用varchar合適;從效率上考慮,用char合適,關(guān)鍵是根據(jù)實際情況找到權(quán)衡點。
3、nchar、nvarchar、ntext。這三種從名字上看比前面三種多了個“n”。它表示存儲的是Unicode數(shù)據(jù)類型的字符。我們知道字符中,英文字符只需要一個字節(jié)存儲就足夠了,但漢字眾多,需要兩個字節(jié)存儲,英文與漢字同時存在時容易造成混亂,Unicode字符集就是為了解決字符集這種不兼容的問題而產(chǎn)生的,它所有的字符都用兩個字節(jié)表示,即英文字符也是用兩個字節(jié)表示。nchar、nvarchar的長度是在1到4000之間。和char、varchar比較起來,nchar、nvarchar則最多存儲4000個字符,不論是英文還是漢字;而char、varchar最多能存儲8000個英文,4000個漢字。可以看出使用nchar、nvarchar數(shù)據(jù)類型時不用擔(dān)心輸入的字符是英文還是漢字,較為方便,但在存儲英文時數(shù)量上有些損失。
所以一般來說,如果含有中文字符,用nchar/nvarchar,如果純英文和數(shù)字,用char/varchar。
- SQL Server 中的數(shù)據(jù)類型隱式轉(zhuǎn)換問題
- SQL Server中T-SQL 數(shù)據(jù)類型轉(zhuǎn)換詳解
- 詳解SQL Server中的數(shù)據(jù)類型
- SQL Server數(shù)據(jù)類型轉(zhuǎn)換方法
- SQL Server比較常見數(shù)據(jù)類型詳解
- SQL Server中實現(xiàn)二進(jìn)制與字符類型之間的數(shù)據(jù)轉(zhuǎn)換
- sqlserver2005 TSql新功能學(xué)習(xí)總結(jié)(數(shù)據(jù)類型篇)
- SQLserver查詢數(shù)據(jù)類型為ntext是空或NULL值的方法
- SQL SERVER 數(shù)據(jù)類型詳解補(bǔ)充2
- sql server 常用的幾個數(shù)據(jù)類型
- sqlserver 數(shù)據(jù)類型轉(zhuǎn)換小實驗
- SQL SERVER的數(shù)據(jù)類型
- Sql Server之?dāng)?shù)據(jù)類型詳解
相關(guān)文章
如何將sql執(zhí)行的錯誤消息記錄到本地文件中實現(xiàn)過程
sql語句的錯誤信息都可以在sys.messages表里面找到,下面與大家分享下將sql 執(zhí)行的錯誤消息記錄到本地文件中,不會的朋友可以參考下哈2013-05-05sqlserver 實現(xiàn)收縮數(shù)據(jù)庫日志操作
這篇文章主要介紹了sqlserver 實現(xiàn)收縮數(shù)據(jù)庫日志操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01CentOS 7.3上SQL Server vNext CTP 1.2安裝教程
這篇文章主要為大家詳細(xì)介紹了CentOS 7.3上SQL Server vNext CTP 1.2安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01SQL Server 存儲過程遇到“表 ''''#TT'''' 沒有標(biāo)識屬性無法執(zhí)行 SET 操作”錯誤
這篇文章主要介紹了SQL Server 存儲過程遇到“表 '#TT' 沒有標(biāo)識屬性無法執(zhí)行 SET 操作”錯誤 的相關(guān)資料,需要的朋友可以參考下2016-07-07Sql?Server高版本數(shù)據(jù)庫數(shù)據(jù)備份后還原到低版本數(shù)據(jù)庫詳細(xì)步驟
不同版本SQL?Server數(shù)據(jù)庫備份還原存在問題,不能從高版本的數(shù)據(jù)庫導(dǎo)入到低版本數(shù)據(jù)中,這篇文章主要給大家介紹了關(guān)于Sql?Server高版本數(shù)據(jù)庫數(shù)據(jù)備份后還原到低版本數(shù)據(jù)庫的詳細(xì)步驟,需要的朋友可以參考下2023-10-10