基于SQL Server中char,nchar,varchar,nvarchar的使用區(qū)別_Mssql數(shù)據(jù)庫(kù)教程
推薦:sql to sqlalchemy 轉(zhuǎn)換的小例子sql to sqlalchemy 轉(zhuǎn)換的小例子,需要的朋友可以參考一下
對(duì)于程序中的一般字符串類(lèi)型的字段,SQL Server中有char、varchar、nchar、nvarchar四種類(lèi)型來(lái)對(duì)應(yīng),那么這四種類(lèi)型有什么區(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,這兩種類(lèi)型使用了Unicode字符集。
3.幾種數(shù)據(jù)類(lèi)型的存儲(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有外連接的時(shí)候注意過(guò)濾條件位置否則會(huì)導(dǎo)致網(wǎng)頁(yè)慢這個(gè)SQL之所以跑得慢是因?yàn)殚_(kāi)發(fā)人員把SQL的條件寫(xiě)錯(cuò)位置了 正確的寫(xiě)法應(yīng)該是下面這樣的,感興趣的朋友可以參考下
- sql 語(yǔ)句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無(wú)法查看數(shù)據(jù)庫(kù),提示 無(wú)法為該請(qǐng)求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語(yǔ)句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類(lèi)似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過(guò)程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫(kù)教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫(kù)教程推薦
- 大內(nèi)存SQL Server數(shù)據(jù)庫(kù)的加速劑
- 如何在SQL Server2005中還原數(shù)據(jù)庫(kù)
- 循序漸進(jìn)講解數(shù)據(jù)表的十二個(gè)設(shè)計(jì)原則
- SQL Server 2008網(wǎng)絡(luò)協(xié)議深入理解
- 如何將SQL Server中的表變成txt 文件
- SQL Server 2008中的新日期數(shù)據(jù)類(lèi)型
- 解讀為SQL Server數(shù)據(jù)庫(kù)傳數(shù)組參數(shù)的變通辦法
- 獲得SQL Server 2005中所有存儲(chǔ)過(guò)程的方法
- 解讀SQL查詢結(jié)果集對(duì)注入的影響及利用
- 淺談SQL Server數(shù)據(jù)倉(cāng)庫(kù)相關(guān)概念及構(gòu)建流程
猜你也喜歡看這些
- 深入探討:MySQL數(shù)據(jù)庫(kù)MyISAM與InnoDB存儲(chǔ)引擎的比較
- 解析:內(nèi)聯(lián),左外聯(lián),右外聯(lián),全連接,交叉連接的區(qū)別
- MySQL中優(yōu)化sql語(yǔ)句查詢常用的30種方法
- mysql常用設(shè)置:字符集編碼、自動(dòng)完成(自動(dòng)提示)、監(jiān)聽(tīng)外網(wǎng)ip
- 怎么重置mysql的自增列AUTO_INCREMENT初時(shí)值
- 基于mysql查詢語(yǔ)句的使用詳解
- 用MyEclipse配置DataBase Explorer(圖示)
- Ubuntu下取消MySQL數(shù)據(jù)庫(kù)本機(jī)綁定限制方法
- 從mysql中導(dǎo)出單個(gè)表結(jié)構(gòu)和數(shù)據(jù)
- MySQL筆記之?dāng)?shù)據(jù)備份與還原的使用詳解
- 相關(guān)鏈接:
復(fù)制本頁(yè)鏈接| 搜索基于SQL Server中char,nchar,varchar,nvarchar的使用區(qū)別
- 教程說(shuō)明:
Mssql數(shù)據(jù)庫(kù)教程-基于SQL Server中char,nchar,varchar,nvarchar的使用區(qū)別
。