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

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

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

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

作者:西西點擊:929次評論:287次標(biāo)簽: SQLite

  • 類型:文件處理大。1.5M語言:中文 評分:3.1
  • 標(biāo)簽:
立即下載

一、存儲種類和數(shù)據(jù)類型:

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

   2. 日期和時間數(shù)據(jù)類型:
    和布爾類型一樣,SQLite也同樣沒有提供專門的日期時間存儲類型,而是以TEXT、REAL和INTEGER類型分別不同的格式表示該類型,如:
    TEXT: "YYYY-MM-DD HH:MM:SS.SSS"
    REAL: 以Julian日期格式存儲
    INTEGER: 以Unix時間形式保存數(shù)據(jù)值,即從1970-01-01 00:00:00到當(dāng)前時間所流經(jīng)的秒數(shù)。

二、類型親緣性:

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

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

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

    2. 具體示例:

聲明類型親緣類型應(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中,類型VARCHAR(255)的長度信息255沒有任何實際意義,僅僅是為了保證與其它數(shù)據(jù)庫的聲明一致性。

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

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

四、操作符:

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

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

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

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