Sqlite3入門學(xué)習(xí)二

SQLite數(shù)據(jù)類型詳解

一醋粟、存儲(chǔ)種類和數(shù)據(jù)類型

SQLite將數(shù)據(jù)值的存儲(chǔ)劃分為以下幾種存儲(chǔ)類型(即在磁盤上存儲(chǔ)的格式):

? ? NULL: 表示該值為NULL值。

? ? INTEGER: 無符號(hào)整型值。

? ? REAL: 浮點(diǎn)值米愿。

? ? TEXT: 文本字符串厦凤,存儲(chǔ)使用的編碼方式為UTF-8、UTF-16BE育苟、UTF-16LE较鼓。

? ? BLOB: 存儲(chǔ)Blob數(shù)據(jù),該類型數(shù)據(jù)和輸入數(shù)據(jù)完全相同违柏。

? ? 傳統(tǒng)SQL 數(shù)據(jù)庫(kù)使用嚴(yán)格的靜態(tài)類型(即字段的數(shù)據(jù)類型是在創(chuàng)建表時(shí)確定的)笨腥,值的類型就是它所在字段的類型,而Sqlite采用的是動(dòng)態(tài)數(shù)據(jù)類型勇垛,單獨(dú)的一個(gè)字段可以包含不同存儲(chǔ)類的值,除了整型主鍵列Integer Primary Key外士鸥,Sqlite數(shù)據(jù)庫(kù)中的任何列闲孤,都可用于存儲(chǔ)任何類型的值,通過值的表示法來判斷其類型烤礁,下面就是其推理方法:

SQL語句中用單引號(hào)或雙引號(hào)括起來的文字被指派為TEXT讼积。

如果文字是未用引號(hào)括起來的數(shù)據(jù),并且沒有小數(shù)點(diǎn)和指數(shù)脚仔,被指派為INTEGER勤众。

如果文字是未用引號(hào)括起來的數(shù)據(jù),并且?guī)в行?shù)點(diǎn)或指數(shù)鲤脏,被指派為REAL们颜。

用NULL說明的值被指派為NULL存儲(chǔ)類。

如果一個(gè)值的格式為X’ABCD’猎醇,其中ABCD為16進(jìn)制數(shù)字窥突,則該值被指派為BLOB。X前綴大小寫皆可硫嘶。

由于在SQLite中阻问,即使在表聲明中明確了字段類型,仍然可以在該字段中存儲(chǔ)其它類型的數(shù)據(jù)沦疾,因此在創(chuàng)建表時(shí)不指定字段類型也是完全有效的. 如:?

sqlite>Create?Table?ex3(a,?b,?c);

另外:存儲(chǔ)分類和數(shù)據(jù)類型也有一定的差別称近,如INTEGER存儲(chǔ)類別可以包含6種不同長(zhǎng)度的Integer數(shù)據(jù)類型,然而這些INTEGER數(shù)據(jù)一旦被讀入到內(nèi)存后哮塞,SQLite會(huì)將其全部視為占用8個(gè)字節(jié)無符號(hào)整型刨秆。

雖然SQLite允許忽略數(shù)據(jù)類型, 但仍建議在Create Table語句中指定各字段的數(shù)據(jù)類型,并盡可能保證數(shù)據(jù)的存儲(chǔ)和其所在字段的類型聲明一致忆畅,這樣做的好處:a 便于數(shù)據(jù)庫(kù)的移植坛善,b方便交流。

1.1 布爾類型

SQLite 并沒有單獨(dú)的布爾存儲(chǔ)類型,而是將布爾值存儲(chǔ)為整數(shù) 0 (false) 和 1 (true)眠屎。

1.2 日期和時(shí)間類型

SQLite 沒有另外的存儲(chǔ)類型來存儲(chǔ)日期和時(shí)間剔交。SQLite 的內(nèi)置的日期和時(shí)間函數(shù)能夠?qū)⑷掌诤蜁r(shí)間存為 TEXT、REAL 或 INTEGER 值:

TEXT? ISO8601 字符串 ("YYYY-MM-DD HH:MM:SS.SSS")改衩。

REAL 儒略日數(shù) (Julian Day Numbers)岖常,按照前公歷,自格林威治時(shí)間公元前4714年11月24日中午以來的天數(shù)葫督。

INTEGER Unix 時(shí)間竭鞍,自 1970-01-01 00:00:00 UTC 以來的秒數(shù)。

應(yīng)用可以選擇這些格式中的任一種存儲(chǔ)日期和時(shí)間橄镜,并使用內(nèi)置的日期和時(shí)間函數(shù)在這些格式間自由轉(zhuǎn)換偎快。

二、 類型親和性

為了最大限度地提高 SQLite 和其它數(shù)據(jù)庫(kù)引擎之間的兼容性洽胶,SQLite 支持列的“類型親和性”的概念晒夹。列的類型親和性是指數(shù)據(jù)存儲(chǔ)于該列的推薦類型。這里重要的思想是類型是推薦的姊氓,而不是必須的丐怯。任何列仍可以存儲(chǔ)任何類型的數(shù)據(jù)。這只是讓一些列有選擇性地優(yōu)先使用某種存儲(chǔ)類型翔横。一個(gè)列的首選存儲(chǔ)類型被稱為它的“親和性”读跷。

在SQLite中,字段沒有類型或域禾唁。當(dāng)給一個(gè)字段聲明了類型效览,該字段實(shí)際上僅僅具有了該類型的親和性。聲明類型和類型親和性是兩回事荡短。類型親和性預(yù)定SQLite用什么存儲(chǔ)類在字段中存儲(chǔ)值钦铺。在存儲(chǔ)一個(gè)給定的值時(shí)到底SQLite會(huì)在該字段中用什么存儲(chǔ)類決定于值的存儲(chǔ)類和字段親和性的結(jié)合。

任何列可以存儲(chǔ)任何類型的數(shù)據(jù)肢预,但列的首選存儲(chǔ)類是它的affinity矛洞。在SQLite3數(shù)據(jù)庫(kù)中,每個(gè)表的列分配為以下類型的affinity之一:

TEXT

NUMERIC

INTEGER

REAL

NONE

一個(gè)具有 TEXT 親和性的列使用存儲(chǔ)類型 NULL烫映、 TEXT 或 BLOB 存儲(chǔ)所有數(shù)據(jù)沼本。如果數(shù)值數(shù)據(jù)被插入到一個(gè)具有 TEXT 親和性的列,則數(shù)據(jù)在存儲(chǔ)前被轉(zhuǎn)換為文本形式

數(shù)值親和性的列可能包含了使用所有五個(gè)存儲(chǔ)類的值锭沟。當(dāng)插入文本數(shù)據(jù)到數(shù)值列時(shí)抽兆,該文本的存儲(chǔ)類型被轉(zhuǎn)換成整型或?qū)崝?shù)(按優(yōu)先級(jí)排序)如果這種轉(zhuǎn)換是無損或可逆的的話。對(duì)于文本與實(shí)數(shù)類型之間的轉(zhuǎn)換族淮,如果前15個(gè)重要十進(jìn)制數(shù)字被保留的話辫红,SQLite認(rèn)為這種轉(zhuǎn)換是無損并可逆的凭涂。如果文本不能無損地轉(zhuǎn)換成整型或?qū)崝?shù),那這個(gè)值將以文本類型存儲(chǔ)贴妻。不要試圖轉(zhuǎn)換NULL或BLOB值切油。

一個(gè)字符串可能看上去像帶有小數(shù)點(diǎn)和/或指數(shù)符的浮點(diǎn)文字,但只要這個(gè)值可以用一個(gè)整型表示名惩,數(shù)值親和性就會(huì)把它轉(zhuǎn)換成一個(gè)整型澎胡。因此,字符串‘3.0e+5’以整型300000娩鹉,而不是浮點(diǎn)值30000.0的形式存儲(chǔ)在一個(gè)數(shù)值親和性的列里攻谁。

sqlite3也接受如下的數(shù)據(jù)類型:?

smallint 16 位元的整數(shù)。?

integer 32 位元的整數(shù)弯予。?

decimal(p,s) p 精確值和 s 大小的十進(jìn)位整數(shù)戚宦,精確值p是指全部有幾個(gè)數(shù)(digits)大小值,s是指小數(shù)點(diǎn)後有幾位數(shù)锈嫩。如果沒有特別指定受楼,則系統(tǒng)會(huì)設(shè)為 p=5; s=0 。?

float? 32位元的實(shí)數(shù)祠挫。?

double? 64位元的實(shí)數(shù)。?

char(n)? n 長(zhǎng)度的字串悼沿,n不能超過 254等舔。?

varchar(n) 長(zhǎng)度不固定且其最大長(zhǎng)度為 n 的字串,n不能超過 4000糟趾。?

graphic(n) 和 char(n) 一樣慌植,不過其單位是兩個(gè)字元 double-bytes, n不能超過127义郑。這個(gè)形態(tài)是為了支援兩個(gè)字元長(zhǎng)度的字體蝶柿,例如中文字。?

vargraphic(n) 可變長(zhǎng)度且其最大長(zhǎng)度為 n 的雙字元字串非驮,n不能超過 2000?

date? 包含了 年份交汤、月份、日期劫笙。?

time? 包含了 小時(shí)芙扎、分鐘、秒填大。?

timestamp 包含了 年戒洼、月、日允华、時(shí)圈浇、分寥掐、秒、千分之一秒磷蜀。?

1. 布爾數(shù)據(jù)類型:

? ? SQLite并沒有提供專門的布爾存儲(chǔ)類型召耘,取而代之的是存儲(chǔ)整型1表示true,0表示false蠕搜。

?2. 日期和時(shí)間數(shù)據(jù)類型:

? ? 和布爾類型一樣怎茫,SQLite也同樣沒有提供專門的日期時(shí)間存儲(chǔ)類型,而是以TEXT妓灌、REAL和INTEGER類型分別不同的格式表示該類型轨蛤,如:

? ? TEXT: "YYYY-MM-DD HH:MM:SS.SSS"

? ? REAL: 以Julian日期格式存儲(chǔ)

? ? INTEGER: 以Unix時(shí)間形式保存數(shù)據(jù)值,即從1970-01-01 00:00:00到當(dāng)前時(shí)間所流經(jīng)的秒數(shù)虫埂。


1. 決定字段親緣性的規(guī)則:

字段的親緣性是根據(jù)該字段在聲明時(shí)被定義的類型來決定的祥山,具體的規(guī)則可以參照以下列表。需要注意的是以下列表的順序掉伏,即如果某一字段類型同時(shí)符合兩種親緣性缝呕,那么排在前面的規(guī)則將先產(chǎn)生作用。

1). 如果類型字符串中包含"INT"斧散,那么該字段的親緣類型是INTEGER供常。

2). 如果類型字符串中包含"CHAR"、"CLOB"或"TEXT"鸡捐,那么該字段的親緣類型是TEXT栈暇,如VARCHAR。

3). 如果類型字符串中包含"BLOB"箍镜,那么該字段的親緣類型是NONE源祈。

4). 如果類型字符串中包含"REAL"、"FLOA"或"DOUB"色迂,那么該字段的親緣類型是REAL香缺。

5). 其余情況下,字段的親緣類型為NUMERIC歇僧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末图张,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子诈悍,更是在濱河造成了極大的恐慌埂淮,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件写隶,死亡現(xiàn)場(chǎng)離奇詭異倔撞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)慕趴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門痪蝇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鄙陡,“玉大人,你說我怎么就攤上這事躏啰〕梅” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵给僵,是天一觀的道長(zhǎng)毫捣。 經(jīng)常有香客問我,道長(zhǎng)帝际,這世上最難降的妖魔是什么蔓同? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蹲诀,結(jié)果婚禮上斑粱,老公的妹妹穿的比我還像新娘。我一直安慰自己脯爪,他們只是感情好则北,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布鹏溯。 她就那樣靜靜地躺著辈毯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摆出。 梳的紋絲不亂的頭發(fā)上掖举,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天快骗,我揣著相機(jī)與錄音,去河邊找鬼拇泛。 笑死滨巴,一個(gè)胖子當(dāng)著我的面吹牛思灌,可吹牛的內(nèi)容都是我干的俺叭。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼泰偿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼熄守!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起耗跛,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤裕照,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后调塌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晋南,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年羔砾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了负间。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偶妖。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖政溃,靈堂內(nèi)的尸體忽然破棺而出趾访,到底是詐尸還是另有隱情,我是刑警寧澤董虱,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布扼鞋,位于F島的核電站,受9級(jí)特大地震影響愤诱,放射性物質(zhì)發(fā)生泄漏云头。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一转锈、第九天 我趴在偏房一處隱蔽的房頂上張望盘寡。 院中可真熱鬧,春花似錦撮慨、人聲如沸竿痰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)影涉。三九已至,卻和暖如春规伐,著一層夾襖步出監(jiān)牢的瞬間蟹倾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工猖闪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鲜棠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓培慌,卻偏偏與公主長(zhǎng)得像豁陆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吵护,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344