主頁(yè) > 知識(shí)庫(kù) > SQLite教程(七):數(shù)據(jù)類型詳解

SQLite教程(七):數(shù)據(jù)類型詳解

熱門標(biāo)簽:外呼調(diào)研系統(tǒng) 重慶自動(dòng)外呼系統(tǒng)定制 地圖標(biāo)注和圖片名稱的區(qū)別 合肥公司外呼系統(tǒng)運(yùn)營(yíng)商 美容工作室地圖標(biāo)注 海豐有多少商家沒(méi)有地圖標(biāo)注 辦公外呼電話系統(tǒng) 打電話智能電銷機(jī)器人授權(quán) 漯河外呼電話系統(tǒng)

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

    SQLite將數(shù)據(jù)值的存儲(chǔ)劃分為以下幾種存儲(chǔ)類型:
 

復(fù)制代碼 代碼如下:

     NULL: 表示該值為NULL值。
     INTEGER: 無(wú)符號(hào)整型值。
     REAL: 浮點(diǎn)值。
     TEXT: 文本字符串,存儲(chǔ)使用的編碼方式為UTF-8、UTF-16BE、UTF-16LE。
     BLOB: 存儲(chǔ)Blob數(shù)據(jù),該類型數(shù)據(jù)和輸入數(shù)據(jù)完全相同。
 

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

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

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

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

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

復(fù)制代碼 代碼如下:

    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ù)。
 

二、類型親緣性:

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

親緣類型 描述  
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類型的數(shù)據(jù),如果轉(zhuǎn)換失敗,SQLite仍會(huì)以TEXT方式存儲(chǔ)該數(shù)據(jù)。對(duì)于NULL或BLOB類型的新數(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ì)于親緣類型為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ù)類型進(jìn)行存儲(chǔ)?! ?/td>

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

    字段的親緣性是根據(jù)該字段在聲明時(shí)被定義的類型來(lái)決定的,具體的規(guī)則可以參照以下列表。需要注意的是以下列表的順序,即如果某一字段類型同時(shí)符合兩種親緣性,那么排在前面的規(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
INTEGER 1
CHARACTER(20)
VARCHAR(255)
VARYING CHARACTER(255)
NCHAR(55)
NATIVE CHARACTER(70)
NVARCHAR(100)
TEXT
CLOB
TEXT 2
BLOB NONE 3
REAL
DOUBLE
DOUBLE PRECISION
FLOAT
REAL 4
NUMERIC
DECIMAL(10,5)
BOOLEAN
DATE
DATETIME
NUMERIC 5

注:在SQLite中,類型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é)果主要依賴于操作數(shù)的存儲(chǔ)方式,其規(guī)則為:
    1). 存儲(chǔ)方式為NULL的數(shù)值小于其它存儲(chǔ)類型的值。
    2). 存儲(chǔ)方式為INTEGER和REAL的數(shù)值小于TEXT或BLOB類型的值,如果同為INTEGER或REAL,則基于數(shù)值規(guī)則進(jìn)行比較。
    3). 存儲(chǔ)方式為TEXT的數(shù)值小于BLOB類型的值,如果同為TEXT,則基于文本規(guī)則(ASCII值)進(jìn)行比較。
    4). 如果是兩個(gè)BLOB類型的數(shù)值進(jìn)行比較,其結(jié)果為C運(yùn)行時(shí)函數(shù)memcmp()的結(jié)果。

四、操作符:

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

您可能感興趣的文章:
  • 詳解SQL Server中的數(shù)據(jù)類型
  • 詳解MySQL數(shù)據(jù)類型int(M)中M的含義
  • mysql存儲(chǔ)引擎和數(shù)據(jù)類型(二)
  • Java數(shù)據(jù)類型與MySql數(shù)據(jù)類型對(duì)照表
  • SQL Server數(shù)據(jù)類型轉(zhuǎn)換方法
  • SQL Server比較常見(jiàn)數(shù)據(jù)類型詳解
  • SQL Server數(shù)據(jù)類型char、nchar、varchar、nvarchar的區(qū)別淺析
  • sql使用cast進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換示例
  • SQL2005中char nchar varchar nvarchar數(shù)據(jù)類型的區(qū)別和使用環(huán)境講解
  • SQL的常用數(shù)據(jù)類型列表詳解

標(biāo)簽:錦州 株洲 珠海 蚌埠 烏海 來(lái)賓 晉城 衡陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQLite教程(七):數(shù)據(jù)類型詳解》,本文關(guān)鍵詞  SQLite,教程,七,數(shù)據(jù),類型,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQLite教程(七):數(shù)據(jù)類型詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于SQLite教程(七):數(shù)據(jù)類型詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章