SQLite入门之数据类型

 

SQLite入门之数据类型


 

2011-05-23 16:47:47  来源:SeaYee



最近在开发一个能够记录日志的程序,要求效率高,须要能作简单的查询和统计。通过同事介绍,看上了SQLite。首先了解一下SQLite存储的数据类型,至于SQLite的发展和工做原理,能够查看SQLite的官方网站(www.sqlite.org),网上的相关文章都挺多挺详细的。 html


1、SQLite简介 git


SQLite,是一款轻型的数据库,是遵照ACID的关联式数据库管理系统,它的设计目标是嵌入式的,并且目前已经在不少嵌入式产品中使用了它,它占用资源很是的低,在嵌入式设备中,可能只须要几百K的内存就够了。它可以支持Windows、Linux、Unix等等主流的操做系统,同时可以跟不少程序语言相结合,好比
Tcl、C#、PHP、Java等,还有ODBC接口,一样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来说,它的处理速度比他们都快。 程序员


2、SQLite数据类型 sql


SQLite除了在字段类型为“Integer Primary
Key”时是限制数据类型外,其它状况下SQLite是Typelessness(无类型)的。这意味着你能够保存任何类型的数据到你所想要保存的任何表的任何列中,不管这列声明的数据类型是什么。 数据库


通常数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具备如下五种数据类型: less


















NULL 空值。
INTEGER 带符号的整型,具体取决有存入数字的范围大小。
REAL 浮点数字,存储为8-byte IEEE浮点数。
TEXT 字符串文本。
BLOB 二进制对象。

但实际上,SQLite 3也接受以下的数据类型: 函数










































smallint 16位元的整数。
interger 32位元的整数。
decimal(p,s) p精确值和s大小的十进位整数,精确值p是指所有有几个数(digits)大小值,s是指小数点後有几位数。若是没有特别指定,则系统会设为p=5;s=0。
float 32位元的实数。
double 64位元的实数。
char(n) n长度的字串,n不能超过254。
varchar(n) 长度不固定且其最大长度为n的字串,n不能超过4000。
graphic(n) 和char(n)同样,不过其单位是两个字元double-bytes,n不能超过127。这个形态是为了支援两个字元长度的字体,例如中文字。
vargraphic(n) 可变长度且其最大长度为n的双字元字串,n不能超过2000。
date 包含了:年份、月份、日期。
time 包含了:小时、分钟、秒。
timestamp 包含了:年、月、日、时、分、秒、千分之一秒。
datetime 包含日期时间格式,必须写成“2011-05-23”不能写为“2011-5-23”,不然在读取时会产生错误!

对于SQLite来讲对字段不指定类型是彻底有效的,如: 学习



即便SQLite容许忽略数据类型,可是仍然建议在你的Create
Table语句中指定数据类型。由于数据类型对于你和其余的程序员交流,或者你准备换掉你的数据库引擎是很是有用的。SQLite支持常见的数据类型,如: 字体



3、SQLite的类型亲和性分析 网站


(如下引用“上善若水”的分析,仅供学习参考。网址:http://www.cnblogs.com/hustssrs/archive/2009/03/03/1402214.html。)


SQLite不强制数据类型约束。任何数据均可以插入任何列。你能够向一个整型列中插入任意长度的字符串,向布尔型列中插入浮点数,或者向字符型列中插入日期型值。在Create
TABLE中所指定的数据类型不会限制在该列中插入任何数据。任何列都可接受任意长度的字符串(只有一种状况除外:标志为INTEGER PRIMARY
KEY的列只能存储64位整数,当向这种列中插数据除整数之外的数据时,将会产生错误。)但SQLite确实使用声明的列类型来指示你所指望的格式。因此,例如你向一个整型列中插入字符串时,SQLite会试图将该字符串转换成一个整数。若是能够转换,它将插入该整数;不然,将插入字符串。这是一个特性,而不是一个Bug。这种特性被称为类型或列亲和性(Type
or Column Affinity)。


一、类型亲和性优势:


    1)、提升和其它DBMS的兼容性,让用户就像是在用通常的DBMS同样而使用它,提升了容错能力。


  
2)、
SQLite支持的数据类型只有五种,而其它的大型DBMS支持的数据类型有几十种,那么若是要将其它的数据转换成SQLite下的数据就根本不能实现,因此就将它的数据类型设计为亲和性的,数据类型种类少了系统实现会简单不少,整个系统也就不会太庞大,由于若是有太多的数据类型限制的话,自己系统在实现方面也会困难些。然而,虽然它支持的类型虽然只有五种,但是实际上任何类型都支持了,这就是SQLite数据类型亲和性的巧妙之处。由此我我的认为这也就是将数据类型设计成为亲和性的初衷。


    3)、在插入数据的时候只要作一些检查和转换便可,实现容易。


二、类型亲和性缺点:


  
1)、
在对表中数据进行统计方面若是有不一致的数据存在则运算比较混乱,其实也就是放宽政策为的是让更多人去维护。不过它本身是有处理方法的,若是在运算时出现不一样类型的数据时就忽略不计等。


    2)、还有在数据比较方面也存在一样的问题,不过也有相应的补救措施,规定了比较准则:


      
a)、

一个具备空存储类型的值被认为小于任何值(包括另一个具备空存储类型的值)。


      
b)、
一个整数值或实数值小于任何文本值和BLOB值。当一个整数或实数和另外一个整数或实数相比较的时候,则按照实际数值来比较。


      
c)、
一个文本值小于BLOB值。当两个文本值相比较的时候,则用C语言类库中的memcmp()函数来比较。然而,有时候也不是这样的,好比在下面所描述的“用户定义的整理顺序”状况下。


       d)、当两个BLOB文本被比较的时候,结果决定于memcmp()函数。

相关文章
相关标签/搜索