日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQLite学习手册(数据类型)

發布時間:2025/3/12 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQLite学习手册(数据类型) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、存儲種類和數據類型:

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

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

二、類型親緣性:

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

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

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

?? ?2. 具體示例:

聲明類型親緣類型應用規則
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沒有任何實際意義,僅僅是為了保證與其它數據庫的聲明一致性。

三、比較表達式:

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

四、操作符:

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



總結

以上是生活随笔為你收集整理的SQLite学习手册(数据类型)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。