基于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

相關(guān)文章
SQL Server 2005 數(shù)據(jù)庫(kù)轉(zhuǎn) SQL Server 2000的方法小結(jié)
這篇文章主要介紹了SQL Server 2005 數(shù)據(jù)庫(kù)轉(zhuǎn) SQL Server 2000的方法,需要的朋友可以參考下2014-04-04
SQL Server 2012 多表連接查詢功能實(shí)例代碼
這篇文章主要介紹了SQL Server 2012 多表連接查詢功能實(shí)例代碼,需要的朋友可以參考下2017-01-01
Spark SQL 中對(duì) Map 類型的操作函數(shù)示例詳解
這篇文章主要介紹了SparkSQL中對(duì)Map類型的操作函數(shù),包括創(chuàng)建、訪問(wèn)、修改、合并、鍵值操作等功能,通過(guò)這些函數(shù),可以方便地進(jìn)行復(fù)雜鍵值對(duì)數(shù)據(jù)的處理,感興趣的朋友跟隨小編一起看看吧2025-01-01
sqlserver 2000 遠(yuǎn)程連接 服務(wù)器的解決方案
在連接本地服務(wù)器時(shí),通常使用的是命名管道協(xié)議(在服務(wù)器網(wǎng)絡(luò)實(shí)用工具里可以看到啟用的協(xié)議有這個(gè)2009-06-06
SQL?Server實(shí)現(xiàn)group_concat功能的詳細(xì)實(shí)例
group_concat函數(shù)能將相同的行組合起來(lái),下面這篇文章主要給大家介紹了關(guān)于SQL?Server實(shí)現(xiàn)group_concat功能的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
安裝sql server2008后再安裝sql 2005找不到本地服務(wù)器的解決方法
這篇文章主要介紹了安裝sql server2008后再安裝sql 2005找不到本地服務(wù)器的解決方法,需要的朋友可以參考下2015-01-01
Sql Server數(shù)據(jù)庫(kù)常用Transact-SQL腳本(推薦)
Transact-SQL(又稱 T-SQL),是在 Microsoft SQL Server 和 Sybase SQL Server 上的 ANSI SQL 實(shí)現(xiàn),這篇文章主要介紹了Sql Server數(shù)據(jù)庫(kù)常用Transact-SQL腳本,需要的朋友可以參考下2019-12-12

