基于SQL Server中char,nchar,varchar,nvarchar的使用區(qū)別
對(duì)于程序中的一般字符串類型的字段,SQL Server中有char、varchar、nchar、nvarchar四種類型來(lái)對(duì)應(yīng),那么這四種類型有什么區(qū)別呢,這里做一下對(duì)比。
1.定長(zhǎng)或變長(zhǎng)
所謂定長(zhǎng)就是長(zhǎng)度固定,當(dāng)要保存的數(shù)據(jù)長(zhǎng)度不夠時(shí)將自動(dòng)在其后面填充英文空格,使長(zhǎng)度達(dá)到相應(yīng)的長(zhǎng)度;有var前綴的,表示是實(shí)際存儲(chǔ)空間是動(dòng)態(tài)變化的,比如varchar,nvarchar變長(zhǎng)字符數(shù)據(jù)則不會(huì)以空格填充。
2.Unicode或非Unicode
數(shù)據(jù)庫(kù)中,英文字符只需要一個(gè)字節(jié)存儲(chǔ)就足夠了,但漢字和其他眾多非英文字符,則需要兩個(gè)字節(jié)存儲(chǔ)。如果英文與漢字同時(shí)存在,由于占用空間數(shù)不同,容易造成混亂,導(dǎo)致讀取出來(lái)的字符串是亂碼。Unicode字符集就是為了解決字符集這種不兼容的問(wèn)題而產(chǎn)生的,它所有的字符都用兩個(gè)字節(jié)表示,即英文字符也是用兩個(gè)字節(jié)表示。而前綴n就表示Unicode字符,比如nchar,nvarchar,這兩種類型使用了Unicode字符集。
3.幾種數(shù)據(jù)類型的存儲(chǔ)的最大容量
char,varchar 最多8000個(gè)英文,4000個(gè)漢字
nchar,nvarchar 最多可存儲(chǔ)4000個(gè)字符,無(wú)論英文還是漢字
--創(chuàng)建表
CREATE TABLE TempTable(
id INT PRIMARY KEY,
charField CHAR(10),
varcharField VARCHAR(10),
nvarcharField NVARCHAR(10)
)
INSERT INTO TempTable VALUES(1,'WFTH','WFTH','WFTH')
INSERT INTO TempTable VALUES(2,'無(wú)風(fēng)聽(tīng)海','無(wú)風(fēng)聽(tīng)海','無(wú)風(fēng)聽(tīng)海')
INSERT INTO TempTable VALUES(3,'','','')
INSERT INTO TempTable(id) VALUES(4)
INSERT INTO TempTable VALUES(5,'1234567890','1234567890','12345')
SELECT DATALENGTH(charField) AS charFieldLen,
DATALENGTH(varcharField) AS varcharFieldLen,
DATALENGTH(nvarcharField) AS nvarcharFieldLen
FROM temptable WHERE id =1
SELECT DATALENGTH(charField) AS charFieldLen,
DATALENGTH(varcharField) AS varcharFieldLen,
DATALENGTH(nvarcharField) AS nvarcharFieldLen
FROM temptable WHERE id =2
SELECT DATALENGTH(charField) AS charFieldLen,
DATALENGTH(varcharField) AS varcharFieldLen,
DATALENGTH(nvarcharField) AS nvarcharFieldLen
FROM temptable WHERE id =3
SELECT DATALENGTH(charField) AS charFieldLen,
DATALENGTH(varcharField) AS varcharFieldLen,
DATALENGTH(nvarcharField) AS nvarcharFieldLen
FROM temptable WHERE id =4
SELECT DATALENGTH(charField) AS charFieldLen,charField,
DATALENGTH(varcharField) AS varcharFieldLen,varcharField,
DATALENGTH(nvarcharField) AS nvarcharFieldLen,nvarcharField
FROM temptable WHERE id =5
- sql中varchar和nvarchar的區(qū)別與使用方法
- 過(guò)程需要參數(shù) ''@statement'' 為 ''ntext/nchar/nvarchar'' 類型
- Sqlserver中char,nchar,varchar與Nvarchar的區(qū)別分析
- 深入SQL Server中char、varchar、text和nchar、nvarchar、ntext的區(qū)別詳解
- SQL2005中char nchar varchar nvarchar數(shù)據(jù)類型的區(qū)別和使用環(huán)境講解
- SQL Server數(shù)據(jù)類型char、nchar、varchar、nvarchar的區(qū)別淺析
- SQL中varchar和nvarchar的基本介紹及其區(qū)別
- mysql如何處理varchar與nvarchar類型中的特殊字符
相關(guān)文章
SQL Server中的執(zhí)行引擎入門(mén) 圖解
當(dāng)查詢優(yōu)化器(Query Optimizer)將T-SQL語(yǔ)句解析后并從執(zhí)行計(jì)劃中選擇最低消耗的執(zhí)行計(jì)劃后,具體的執(zhí)行就會(huì)交由執(zhí)行引擎(Execution Engine)來(lái)進(jìn)行執(zhí)行2012-05-05精妙的SQL和SQL SERVER 與ACCESS、EXCEL的數(shù)據(jù)導(dǎo)入導(dǎo)出轉(zhuǎn)換
sqlserver 與access,excel互相導(dǎo)入導(dǎo)出代碼2008-03-03SQL Server中實(shí)現(xiàn)二進(jìn)制與字符類型之間的數(shù)據(jù)轉(zhuǎn)換
在SQL Server 數(shù)據(jù)庫(kù)中,如何實(shí)現(xiàn)二進(jìn)制數(shù)據(jù)與字符串?dāng)?shù)據(jù)之間的直接轉(zhuǎn)換2012-11-11sqlserver中將varchar類型轉(zhuǎn)換為int型再進(jìn)行排序的方法
sql中把varchar類型轉(zhuǎn)換為int型然后進(jìn)行排序,如果我們數(shù)據(jù)庫(kù)的ID設(shè)置為varchar型的 在查詢的時(shí)候order by id的話2012-06-06sqlserver服務(wù)器驗(yàn)證改為混合驗(yàn)證模式步驟
如果在安裝SQL Server數(shù)據(jù)庫(kù)時(shí),一時(shí)疏忽使用了Windows集成驗(yàn)證方式,事后還是可以更改為混合驗(yàn)證模式的,步驟如下2013-12-12SQLserver存儲(chǔ)過(guò)程寫(xiě)法與設(shè)置定時(shí)執(zhí)行存儲(chǔ)過(guò)程方法詳解
一直都很想了解如何寫(xiě)存儲(chǔ)過(guò)程,對(duì)于不熟悉的東西,總是覺(jué)得很神秘,下面這篇文章主要給大家介紹了關(guān)于SQLserver存儲(chǔ)過(guò)程寫(xiě)法與設(shè)置定時(shí)執(zhí)行存儲(chǔ)過(guò)程方法的相關(guān)資料,需要的朋友可以參考下2023-03-03SQL注入語(yǔ)義分析庫(kù)libinjection簡(jiǎn)介
libinjection是一款用于防御SQL注入攻擊的開(kāi)源軟件庫(kù),它可以通過(guò)對(duì)不同語(yǔ)句進(jìn)行詞法分析和語(yǔ)法分析來(lái)實(shí)現(xiàn)對(duì)SQL語(yǔ)句以及HTML語(yǔ)句的解析,這篇文章主要介紹了SQL注入語(yǔ)義分析庫(kù)libinjection,需要的朋友可以參考下2023-03-03