sqlite數(shù)據(jù)庫(kù)的char,varchar,text,nchar,nvarchar,ntext的區(qū)別(轉(zhuǎn))
sqlite數(shù)據(jù)庫(kù)存儲(chǔ)table
1、CHAR。CHAR存儲(chǔ)定長(zhǎng)數(shù)據(jù)很方便,CHAR字段上的索引效率級(jí)高,比如定義char(10),那么不論你存儲(chǔ)的數(shù)據(jù)是否達(dá)到了10個(gè)字節(jié),都要占去10個(gè)字節(jié)的空間,不足的自動(dòng)用空格填充。
2、VARCHAR。存儲(chǔ)變長(zhǎng)數(shù)據(jù),但存儲(chǔ)效率沒有CHAR高。如果一個(gè)字段可能的值是不固定長(zhǎng)度的,我們只知道它不可能超過10個(gè)字符,把它定義為 VARCHAR(10)是最合算的。VARCHAR類型的實(shí)際長(zhǎng)度是它的值的實(shí)際長(zhǎng)度+1。為什么“+1”呢?這一個(gè)字節(jié)用于保存實(shí)際使用了多大的長(zhǎng)度。從空間上考慮,用varchar合適;從效率上考慮,用char合適,關(guān)鍵是根據(jù)實(shí)際情況找到權(quán)衡點(diǎn)。
3、TEXT。text存儲(chǔ)可變長(zhǎng)度的非Unicode數(shù)據(jù),最大長(zhǎng)度為2^31-1(2,147,483,647)個(gè)字符。
4、NCHAR、NVARCHAR、NTEXT。這三種從名字上看比前面三種多了個(gè)“N”。它表示存儲(chǔ)的是Unicode數(shù)據(jù)類型的字符。我們知道字符中,英文字符只需要一個(gè)字節(jié)存儲(chǔ)就足夠了,但漢字眾多,需要兩個(gè)字節(jié)存儲(chǔ),英文與漢字同時(shí)存在時(shí)容易造成混亂,Unicode字符集就是為了解決字符集這種不兼容的問題而產(chǎn)生的,它所有的字符都用兩個(gè)字節(jié)表示,即英文字符也是用兩個(gè)字節(jié)表示。nchar、nvarchar的長(zhǎng)度是在1到4000之間。和char、varchar比較起來,nchar、nvarchar則最多存儲(chǔ)4000個(gè)字符,不論是英文還是漢字;而char、varchar最多能存儲(chǔ)8000個(gè)英文,4000個(gè)漢字。可以看出使用nchar、nvarchar數(shù)據(jù)類型時(shí)不用擔(dān)心輸入的字符是英文還是漢字,較為方便,但在存儲(chǔ)英文時(shí)數(shù)量上有些損失。
所以一般來說,如果含有中文字符,用nchar/nvarchar,如果純英文和數(shù)字,用char/varchar。
SQLite最大的特點(diǎn)在于其數(shù)據(jù)類型為無(wú)數(shù)據(jù)類型(typelessness)。這意味著可以保存任何類型的數(shù)據(jù)到所想要保存的任何表的任何列中,無(wú)論這列聲明的數(shù)據(jù)類型是什么。雖然在生成表結(jié)構(gòu)的時(shí)候,要聲明每個(gè)域的數(shù)據(jù)類型,但SQLite并不做任何檢查。開發(fā)人員要靠自己的程序來控制輸入與讀出數(shù)據(jù)的類型。這里有一個(gè)例外,就是當(dāng)主鍵為整型值時(shí),如果要插入一個(gè)非整型值時(shí)會(huì)產(chǎn)生異常。
雖然,SQLite允許忽略數(shù)據(jù)類型,但是,仍然建議在Create Table語(yǔ)句中指定數(shù)據(jù)類型,因?yàn)閿?shù)據(jù)類型有利于增強(qiáng)程序的可讀性。另外,雖然在插入或讀出數(shù)據(jù)的時(shí)候是不區(qū)分類型的,但在比較的時(shí)候,不同數(shù)據(jù)類型是有區(qū)別的.
浙公網(wǎng)安備 33010602011771號(hào)