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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQLite入门之数据类型

發(fā)布時間:2023/12/9 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQLite入门之数据类型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

?

SQLite入門之?dāng)?shù)據(jù)類型


?

2011-05-23 16:47:47? 來源:SeaYee



最近在開發(fā)一個可以記錄日志的程序,要求效率高,需要能做簡單的查詢和統(tǒng)計。經(jīng)過同事介紹,看上了SQLite。首先了解一下SQLite存儲的數(shù)據(jù)類型,至于SQLite的發(fā)展和工作原理,可以查看SQLite的官方網(wǎng)站(www.sqlite.org),網(wǎng)上的相關(guān)文章都挺多挺詳細(xì)的。


一、SQLite簡介


SQLite,是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows、Linux、Unix等等主流的操作系統(tǒng),同時能夠跟很多程序語言相結(jié)合,比如
Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。


二、SQLite數(shù)據(jù)類型


SQLite除了在字段類型為“Integer Primary
Key”時是限制數(shù)據(jù)類型外,其它情況下SQLite是Typelessness(無類型)的。這意味著你可以保存任何類型的數(shù)據(jù)到你所想要保存的任何表的任何列中,無論這列聲明的數(shù)據(jù)類型是什么。


一般數(shù)據(jù)采用的固定的靜態(tài)數(shù)據(jù)類型,而SQLite采用的是動態(tài)數(shù)據(jù)類型,會根據(jù)存入值自動判斷。SQLite具有以下五種數(shù)據(jù)類型:


















NULL 空值。
INTEGER 帶符號的整型,具體取決有存入數(shù)字的范圍大小。
REAL 浮點數(shù)字,存儲為8-byte IEEE浮點數(shù)。
TEXT 字符串文本。
BLOB 二進(jìn)制對象。

但實際上,SQLite 3也接受如下的數(shù)據(jù)類型:










































smallint 16位元的整數(shù)。
interger 32位元的整數(shù)。
decimal(p,s) p精確值和s大小的十進(jìn)位整數(shù),精確值p是指全部有幾個數(shù)(digits)大小值,s是指小數(shù)點後有幾位數(shù)。如果沒有特別指定,則系統(tǒng)會設(shè)為p=5;s=0。
float 32位元的實數(shù)。
double 64位元的實數(shù)。
char(n) n長度的字串,n不能超過254。
varchar(n) 長度不固定且其最大長度為n的字串,n不能超過4000。
graphic(n) 和char(n)一樣,不過其單位是兩個字元double-bytes,n不能超過127。這個形態(tài)是為了支援兩個字元長度的字體,例如中文字。
vargraphic(n) 可變長度且其最大長度為n的雙字元字串,n不能超過2000。
date 包含了:年份、月份、日期。
time 包含了:小時、分鐘、秒。
timestamp 包含了:年、月、日、時、分、秒、千分之一秒。
datetime 包含日期時間格式,必須寫成“2011-05-23”不能寫為“2011-5-23”,否則在讀取時會產(chǎn)生錯誤!

對于SQLite來說對字段不指定類型是完全有效的,如:




?




1
CreateTableex3(a, b, c);

即使SQLite允許忽略數(shù)據(jù)類型,但是仍然建議在你的Create
Table語句中指定數(shù)據(jù)類型。因為數(shù)據(jù)類型對于你和其他的程序員交流,或者你準(zhǔn)備換掉你的數(shù)據(jù)庫引擎是非常有用的。SQLite支持常見的數(shù)據(jù)類型,如:




?




1 2 3 4 5 6 7 8 9 10 11 12 13 14
CREATETABLEex2( aVARCHAR(10), bNVARCHAR(15), cTEXT, dINTEGER, eFLOAT, fBOOLEAN, gCLOB, hBLOB, iTIMESTAMP, jNUMERIC(10,5), kVARYINGCHARACTER(24), lNATIONALVARYINGCHARACTER(16) );

三、SQLite的類型親和性分析


(以下引用“上善若水”的分析,僅供學(xué)習(xí)參考。網(wǎng)址:http://www.cnblogs.com/hustssrs/archive/2009/03/03/1402214.html。)


SQLite不強(qiáng)制數(shù)據(jù)類型約束。任何數(shù)據(jù)都可以插入任何列。你可以向一個整型列中插入任意長度的字符串,向布爾型列中插入浮點數(shù),或者向字符型列中插入日期型值。在Create
TABLE中所指定的數(shù)據(jù)類型不會限制在該列中插入任何數(shù)據(jù)。任何列均可接受任意長度的字符串(只有一種情況除外:標(biāo)志為INTEGER PRIMARY
KEY的列只能存儲64位整數(shù),當(dāng)向這種列中插數(shù)據(jù)除整數(shù)以外的數(shù)據(jù)時,將會產(chǎn)生錯誤。)但SQLite確實使用聲明的列類型來指示你所期望的格式。所以,例如你向一個整型列中插入字符串時,SQLite會試圖將該字符串轉(zhuǎn)換成一個整數(shù)。如果可以轉(zhuǎn)換,它將插入該整數(shù);否則,將插入字符串。這是一個特性,而不是一個Bug。這種特性被稱為類型或列親和性(Type
or Column Affinity)。


1、類型親和性優(yōu)點:


??? 1)、提高和其它DBMS的兼容性,讓用戶就像是在用一般的DBMS一樣而使用它,提高了容錯能力。


??
2)、
SQLite支持的數(shù)據(jù)類型只有五種,而其它的大型DBMS支持的數(shù)據(jù)類型有幾十種,那么如果要將其它的數(shù)據(jù)轉(zhuǎn)換成SQLite下的數(shù)據(jù)就根本不能實現(xiàn),所以就將它的數(shù)據(jù)類型設(shè)計為親和性的,數(shù)據(jù)類型種類少了系統(tǒng)實現(xiàn)會簡單很多,整個系統(tǒng)也就不會太龐大,因為如果有太多的數(shù)據(jù)類型限制的話,本身系統(tǒng)在實現(xiàn)方面也會困難些。然而,雖然它支持的類型雖然只有五種,可是實際上任何類型都支持了,這就是SQLite數(shù)據(jù)類型親和性的巧妙之處。由此我個人認(rèn)為這也就是將數(shù)據(jù)類型設(shè)計成為親和性的初衷。


??? 3)、在插入數(shù)據(jù)的時候只要做一些檢查和轉(zhuǎn)換即可,實現(xiàn)容易。


2、類型親和性缺點:


??
1)、
在對表中數(shù)據(jù)進(jìn)行統(tǒng)計方面如果有不一致的數(shù)據(jù)存在則運算比較混亂,其實也就是放寬政策為的是讓更多人去維護(hù)。不過它自己是有處理方法的,如果在運算時出現(xiàn)不同類型的數(shù)據(jù)時就忽略不計等。


??? 2)、還有在數(shù)據(jù)比較方面也存在同樣的問題,不過也有相應(yīng)的補(bǔ)救措施,規(guī)定了比較準(zhǔn)則:


??????
a)、

一個具有空存儲類型的值被認(rèn)為小于任何值(包括另外一個具有空存儲類型的值)。


??????
b)、
一個整數(shù)值或?qū)崝?shù)值小于任何文本值和BLOB值。當(dāng)一個整數(shù)或?qū)崝?shù)和另一個整數(shù)或?qū)崝?shù)相比較的時候,則按照實際數(shù)值來比較。


??????
c)、
一個文本值小于BLOB值。當(dāng)兩個文本值相比較的時候,則用C語言類庫中的memcmp()函數(shù)來比較。然而,有時候也不是這樣的,比如在下面所描述的“用戶定義的整理順序”情況下。


??????
d)、
當(dāng)兩個BLOB文本被比較的時候,結(jié)果決定于memcmp()函數(shù)。

轉(zhuǎn)載于:https://my.oschina.net/u/246578/blog/136552

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。