varchar與char的轉(zhuǎn)換 數(shù)據(jù)庫(kù)char,varchar,nchar,nvarchar類(lèi)型分別有什么區(qū)別?各自在什么情況下使用比較好?
數(shù)據(jù)庫(kù)char,varchar,nchar,nvarchar類(lèi)型分別有什么區(qū)別?各自在什么情況下使用比較好?簡(jiǎn)而言之,char和nchar只能存儲(chǔ)單字節(jié)字符,如a、a、1、3等,存儲(chǔ)字符的長(zhǎng)度是不可變
數(shù)據(jù)庫(kù)char,varchar,nchar,nvarchar類(lèi)型分別有什么區(qū)別?各自在什么情況下使用比較好?
簡(jiǎn)而言之,char和nchar只能存儲(chǔ)單字節(jié)字符,如a、a、1、3等,存儲(chǔ)字符的長(zhǎng)度是不可變的。例如char(5),如果輸入字符AA,則存儲(chǔ)空間將用空格填充其他三個(gè)空位,而物理存儲(chǔ)的長(zhǎng)度仍然是5個(gè)字符。
Varchar和nvarchar可以存儲(chǔ)長(zhǎng)度可變的單字節(jié)和雙字節(jié)字符。區(qū)別同上。Char和nchar很少使用。Varchar和nvarchar更常用。因?yàn)閚varchar會(huì)浪費(fèi)存儲(chǔ)空間,所以它通常被更頻繁地使用。Nvarchar確保定義的長(zhǎng)度為100。無(wú)論輸入的是單字節(jié)字符還是雙字節(jié)字符,都不能超過(guò)100。如果varchar的大小為100,則單字節(jié)字符輸入不能超過(guò)100,而雙字節(jié)字符輸入不能超過(guò)Char:Char存儲(chǔ)定長(zhǎng)數(shù)據(jù)非常方便,Char字段的索引效率水平也很高。例如,define char(10),因此無(wú)論您存儲(chǔ)的數(shù)據(jù)是否達(dá)到10字節(jié),它都將占用10字節(jié)的空間。
2. Varchar:存儲(chǔ)可變長(zhǎng)度的數(shù)據(jù),但是存儲(chǔ)效率沒(méi)有char高。如果一個(gè)字段的可能值不是固定長(zhǎng)度,我們只知道它不能超過(guò)10個(gè)字符。將其定義為varchar(10)是最劃算的。
3. Nchar和nvarchar的名字比前三個(gè)多。這意味著存儲(chǔ)Unicode數(shù)據(jù)類(lèi)型的字符。我們知道英文字符只需要一個(gè)字節(jié)來(lái)存儲(chǔ),但是有許多中文字符需要兩個(gè)字節(jié)來(lái)存儲(chǔ)。當(dāng)英文和漢字同時(shí)存在時(shí),很容易造成混淆。Unicode字符集的產(chǎn)生是為了解決字符集的不兼容問(wèn)題。它的所有字符都用兩個(gè)字節(jié)來(lái)表示,也就是說(shuō),英文字符也用兩個(gè)字節(jié)來(lái)表示。
4. 用n可以存儲(chǔ)4000個(gè)字符,英文字母存在于n型中,也是按兩個(gè)字節(jié)計(jì)算的。不需要n就可以存儲(chǔ)8000個(gè)字符,英文字符按一個(gè)字節(jié),中文字符按兩個(gè)字節(jié)。一般來(lái)說(shuō),nchar/nvarchar用于漢字,char/varchar用于英文和數(shù)字。
數(shù)據(jù)庫(kù)中char, nchar,varchar, nvarchar的差異?
首先,這個(gè)問(wèn)題不是很標(biāo)準(zhǔn)。一般來(lái)說(shuō),char和nchar,nvarchar和varchar是成對(duì)的!它們都代表字符,char和varchar在以前的版本中會(huì)出現(xiàn)亂碼問(wèn)題,所以需要使用nchar和nvarchar來(lái)解決這個(gè)中文亂碼問(wèn)題!但是char和varchar的當(dāng)前版本與中文兼容,也就是說(shuō),是否加n沒(méi)有區(qū)別。一些數(shù)據(jù)庫(kù)甚至消除了nchar和nvarchar。那么,這個(gè)char和varchar有什么區(qū)別?在數(shù)據(jù)庫(kù)中,您需要指定使用它們的長(zhǎng)度!例如,你給他們所有10個(gè)字節(jié)的長(zhǎng)度char(10)varchar(10),但在實(shí)際使用中,你許可使用5個(gè)字節(jié)。char type的長(zhǎng)度不足時(shí)會(huì)用10個(gè)字節(jié)的空格填充,但varchar type在使用時(shí)只有5個(gè)字節(jié),不會(huì)用10個(gè)字節(jié)的空格填充。顯然,varchar是實(shí)際開(kāi)發(fā)中使用最多的!例如,如果您的密碼類(lèi)型是char(10),但是當(dāng)您設(shè)置密碼時(shí),您只需要六個(gè)123456長(zhǎng)度。登錄時(shí)只需輸入123456(實(shí)際上,沒(méi)有人會(huì)添加更多的空格,也不可能知道)。此時(shí),您單擊“登錄”按鈕確認(rèn)實(shí)際密碼是錯(cuò)誤的,因?yàn)槟斎氲拿艽a沒(méi)有四個(gè)空格,即下面的數(shù)據(jù)庫(kù)密碼不匹配。但是用varchar(10),可以很好的解決這個(gè)問(wèn)題,你設(shè)置的密碼只要長(zhǎng)!這就是原則!歡迎有不同意見(jiàn)的it老板評(píng)論如下。