西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴(lài)的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)西西教程數(shù)據(jù)庫(kù)教程 → SQLite學(xué)習(xí)手冊(cè)--數(shù)據(jù)類(lèi)型

SQLite學(xué)習(xí)手冊(cè)--數(shù)據(jù)類(lèi)型

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2012/2/22 11:24:33字體大。A-A+

作者:西西點(diǎn)擊:929次評(píng)論:287次標(biāo)簽: SQLite

  • 類(lèi)型:文件處理大小:1.5M語(yǔ)言:中文 評(píng)分:3.1
  • 標(biāo)簽:
立即下載

一、存儲(chǔ)種類(lèi)和數(shù)據(jù)類(lèi)型:

    SQLite將數(shù)據(jù)值的存儲(chǔ)劃分為以下幾種存儲(chǔ)類(lèi)型:
     NULL: 表示該值為NULL值。
     INTEGER: 無(wú)符號(hào)整型值。
     REAL: 浮點(diǎn)值。
     TEXT: 文本字符串,存儲(chǔ)使用的編碼方式為UTF-8、UTF-16BE、UTF-16LE。
     BLOB: 存儲(chǔ)Blob數(shù)據(jù),該類(lèi)型數(shù)據(jù)和輸入數(shù)據(jù)完全相同。
    由于SQLite采用的是動(dòng)態(tài)數(shù)據(jù)類(lèi)型,而其他傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)使用的是靜態(tài)數(shù)據(jù)類(lèi)型,即字段可以存儲(chǔ)的數(shù)據(jù)類(lèi)型是在表聲明時(shí)即以確定的,因此它們之間在數(shù)據(jù)存儲(chǔ)方面還是存在著很大的差異。在SQLite中,存儲(chǔ)分類(lèi)和數(shù)據(jù)類(lèi)型也有一定的差別,如INTEGER存儲(chǔ)類(lèi)別可以包含6種不同長(zhǎng)度的Integer數(shù)據(jù)類(lèi)型,然而這些INTEGER數(shù)據(jù)一旦被讀入到內(nèi)存后,SQLite會(huì)將其全部視為占用8個(gè)字節(jié)無(wú)符號(hào)整型。因此對(duì)于SQLite而言,即使在表聲明中明確了字段類(lèi)型,我們?nèi)匀豢梢栽谠撟侄沃写鎯?chǔ)其它類(lèi)型的數(shù)據(jù)。然而需要特別說(shuō)明的是,盡管SQLite為我們提供了這種方便,但是一旦考慮到數(shù)據(jù)庫(kù)平臺(tái)的可移植性問(wèn)題,我們?cè)趯?shí)際的開(kāi)發(fā)中還是應(yīng)該盡可能的保證數(shù)據(jù)類(lèi)型的存儲(chǔ)和聲明的一致性。除非你有極為充分的理由,同時(shí)又不再考慮數(shù)據(jù)庫(kù)平臺(tái)的移植問(wèn)題,在此種情況下確實(shí)可以使用SQLite提供的此種特征。
   1. 布爾數(shù)據(jù)類(lèi)型:
    SQLite并沒(méi)有提供專(zhuān)門(mén)的布爾存儲(chǔ)類(lèi)型,取而代之的是存儲(chǔ)整型1表示true,0表示false。

   2. 日期和時(shí)間數(shù)據(jù)類(lèi)型:
    和布爾類(lèi)型一樣,SQLite也同樣沒(méi)有提供專(zhuān)門(mén)的日期時(shí)間存儲(chǔ)類(lèi)型,而是以TEXT、REAL和INTEGER類(lèi)型分別不同的格式表示該類(lèi)型,如:
    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ù)。

二、類(lèi)型親緣性:

    為了最大化SQLite和其它數(shù)據(jù)庫(kù)引擎之間的數(shù)據(jù)類(lèi)型兼容性,SQLite提出了"類(lèi)型親緣性(Type Affinity)"的概念。我們可以這樣理解"類(lèi)型親緣性 ",在表字段被聲明之后,SQLite都會(huì)根據(jù)該字段聲明時(shí)的類(lèi)型為其選擇一種親緣類(lèi)型,當(dāng)數(shù)據(jù)插入時(shí),該字段的數(shù)據(jù)將會(huì)優(yōu)先采用親緣類(lèi)型作為該值的存儲(chǔ)方式,除非親緣類(lèi)型不匹配或無(wú)法轉(zhuǎn)換當(dāng)前數(shù)據(jù)到該親緣類(lèi)型,這樣SQLite才會(huì)考慮其它更適合該值的類(lèi)型存儲(chǔ)該值。SQLite目前的版本支持以下五種親緣類(lèi)型:

親緣類(lèi)型描述  
TEXT數(shù)值型數(shù)據(jù)在被插入之前,需要先被轉(zhuǎn)換為文本格式,之后再插入到目標(biāo)字段中。
NUMERIC當(dāng)文本數(shù)據(jù)被插入到親緣性為NUMERIC的字段中時(shí),如果轉(zhuǎn)換操作不會(huì)導(dǎo)致數(shù)據(jù)信息丟失以及完全可逆,那么SQLite就會(huì)將該文本數(shù)據(jù)轉(zhuǎn)換為INTEGER或REAL類(lèi)型的數(shù)據(jù),如果轉(zhuǎn)換失敗,SQLite仍會(huì)以TEXT方式存儲(chǔ)該數(shù)據(jù)。對(duì)于NULL或BLOB類(lèi)型的新數(shù)據(jù),SQLite將不做任何轉(zhuǎn)換,直接以NULL或BLOB的方式存儲(chǔ)該數(shù)據(jù)。需要額外說(shuō)明的是,對(duì)于浮點(diǎn)格式的常量文本,如"30000.0",如果該值可以轉(zhuǎn)換為INTEGER同時(shí)又不會(huì)丟失數(shù)值信息,那么SQLite就會(huì)將其轉(zhuǎn)換為INTEGER的存儲(chǔ)方式。
INTEGER對(duì)于親緣類(lèi)型為INTEGER的字段,其規(guī)則等同于NUMERIC,唯一差別是在執(zhí)行CAST表達(dá)式時(shí)。
REAL其規(guī)則基本等同于NUMERIC,唯一的差別是不會(huì)將"30000.0"這樣的文本數(shù)據(jù)轉(zhuǎn)換為INTEGER存儲(chǔ)方式。
NONE不做任何的轉(zhuǎn)換,直接以該數(shù)據(jù)所屬的數(shù)據(jù)類(lèi)型進(jìn)行存儲(chǔ)! 

   1. 決定字段親緣性的規(guī)則:
    字段的親緣性是根據(jù)該字段在聲明時(shí)被定義的類(lèi)型來(lái)決定的,具體的規(guī)則可以參照以下列表。需要注意的是以下列表的順序,即如果某一字段類(lèi)型同時(shí)符合兩種親緣性,那么排在前面的規(guī)則將先產(chǎn)生作用。
    1). 如果類(lèi)型字符串中包含"INT",那么該字段的親緣類(lèi)型是INTEGER。
    2). 如果類(lèi)型字符串中包含"CHAR"、"CLOB"或"TEXT",那么該字段的親緣類(lèi)型是TEXT,如VARCHAR。
    3). 如果類(lèi)型字符串中包含"BLOB",那么該字段的親緣類(lèi)型是NONE。
    4). 如果類(lèi)型字符串中包含"REAL"、"FLOA"或"DOUB",那么該字段的親緣類(lèi)型是REAL。
    5). 其余情況下,字段的親緣類(lèi)型為NUMERIC。

    2. 具體示例:

聲明類(lèi)型親緣類(lèi)型應(yīng)用規(guī)則
INT
INTEGER
TINYINT
SMALLINT
MEDIUMINT
BIGINT
UNSIGNED BIG INT
INT2
INT8
INTEGER1
CHARACTER(20)
VARCHAR(255)
VARYING CHARACTER(255)
NCHAR(55)
NATIVE CHARACTER(70)
NVARCHAR(100)
TEXT
CLOB
TEXT2
BLOBNONE3
REAL
DOUBLE
DOUBLE PRECISION
FLOAT
REAL4
NUMERIC
DECIMAL(10,5)
BOOLEAN
DATE
DATETIME
NUMERIC5

    注:在SQLite中,類(lèi)型VARCHAR(255)的長(zhǎng)度信息255沒(méi)有任何實(shí)際意義,僅僅是為了保證與其它數(shù)據(jù)庫(kù)的聲明一致性。

三、比較表達(dá)式:

    在SQLite3中支持的比較表達(dá)式有:"=", "==", "<", "<=", ">", ">=", "!=", "<>", "IN", "NOT IN", "BETWEEN", "IS" and "IS NOT"。
    數(shù)據(jù)的比較結(jié)果主要依賴(lài)于操作數(shù)的存儲(chǔ)方式,其規(guī)則為:
    1). 存儲(chǔ)方式為NULL的數(shù)值小于其它存儲(chǔ)類(lèi)型的值。
    2). 存儲(chǔ)方式為INTEGER和REAL的數(shù)值小于TEXT或BLOB類(lèi)型的值,如果同為INTEGER或REAL,則基于數(shù)值規(guī)則進(jìn)行比較。
    3). 存儲(chǔ)方式為T(mén)EXT的數(shù)值小于BLOB類(lèi)型的值,如果同為T(mén)EXT,則基于文本規(guī)則(ASCII值)進(jìn)行比較。
    4). 如果是兩個(gè)BLOB類(lèi)型的數(shù)值進(jìn)行比較,其結(jié)果為C運(yùn)行時(shí)函數(shù)memcmp()的結(jié)果。

四、操作符:

    所有的數(shù)學(xué)操作符(+, -, *, /, %, <<, >>, &, and |)在執(zhí)行之前都會(huì)先將操作數(shù)轉(zhuǎn)換為NUMERIC存儲(chǔ)類(lèi)型,即使在轉(zhuǎn)換過(guò)程中可能會(huì)造成數(shù)據(jù)信息的丟失。此外,如果其中一個(gè)操作數(shù)為NULL,那么它們的結(jié)果亦為NULL。在數(shù)學(xué)操作符中,如果其中一個(gè)操作數(shù)看上去并不像數(shù)值類(lèi)型,那么它們結(jié)果為0或0.0。

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(287)

    昵稱(chēng):
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)