2019独角兽企业重金招聘Python工程师标准>>>

SQLite入门之数据类型

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

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

一、SQLite简介

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

二、SQLite数据类型

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

一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种数据类型:

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来说对字段不指定类型是完全有效的,如:

?
1
CreateTableex3(a, b, c);

即使SQLite允许忽略数据类型,但是仍然建议在你的Create
Table语句中指定数据类型。因为数据类型对于你和其他的程序员交流,或者你准备换掉你的数据库引擎是非常有用的。SQLite支持常见的数据类型,如:

?
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的类型亲和性分析

(以下引用“上善若水”的分析,仅供学习参考。网址: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、类型亲和性优点:

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

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

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

2、类型亲和性缺点:

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

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

      
a)、

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

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

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

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

转载于:https://my.oschina.net/u/246578/blog/136552

SQLite入门之数据类型相关推荐

  1. SQLite 入门教程(二)创建、修改、删除表

    一.数据库定义语言 DDL 在关系型数据库中,数据库中的表 Table.视图 View.索引 Index.关系 Relationship 和触发器 Trigger 等等,构成了数据库的架构 Schem ...

  2. SQLite入门与分析(二)---设计与概念

    写在前面:谢谢各位的关注,没想到会有这么多人关注.高兴的同时,也感到压力,因为我接触SQLite也就几天,也没在实际开发中用过,只是最近项目的需求才来研究它,所以我很担心自己的文章是否会有错误,误导别 ...

  3. SQLite学习手册(数据类型)

    一.存储种类和数据类型: SQLite将数据值的存储划分为以下几种存储类型:      NULL: 表示该值为NULL值.      INTEGER: 无符号整型值.      REAL: 浮点值. ...

  4. sqlite读音_SQLite 数据类型

    SQLite 数据类型 参考: SQLite 数据类型 | 菜鸟教程 http://www.runoob.com/sqlite/sqlite-data-types.html SQLite 数据类型是一 ...

  5. SQLite入门笔记

    先来一段客套话 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几 ...

  6. Redis基础篇-(入门、数据类型、通用命令、Jedis)

    windows系统环境 目录 Redis入门 问题现象: 罪魁祸首---关系型数据库 解决思路 Nosql 常见的Nosql数据库: 解决方案(电商场景): Redis简介 Redis的应用 Redi ...

  7. SQLite入门到精通之十二:进阶3:特殊指令:PRAGMA|Join|Unions|Alter

    SQLite PRAGMA SQLite 的 PRAGMA 命令是一个特殊的命令,可以用在 SQLite 环境内控制各种环境变量和状态标志.一个 PRAGMA 值可以被读取,也可以根据需求进行设置. ...

  8. 浮点数,字符串入门,基本数据类型自动转换,JDK7新特性, 变量.

    8.1 浮点型 **√ **float**类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求. √ ****double表示这种类型的数值精度是floa ...

  9. Python基础入门----基本数据类型上

    Python基础入门篇 粉丝问题整理 前两节我们安装了Python3.7.0和Pycharm(代码编译器),本节我们从Python基本数据类型开始分享,不知道朋友们是否明白上两节的分享?如果没有请直接 ...

最新文章

  1. 摸不到视频里的犀牛,却能在它身上画画,特效紧贴凹凸表面,动也不掉:全靠免费AE插件...
  2. 如何玩转网络安全下的深度学习?最全的学习资料清单看这里
  3. 解决 Microsoft Excel has stopped working
  4. 垃圾邮件分类 python_在python中创建SMS垃圾邮件分类器
  5. 多功能语音播放器上线啦~
  6. Deepin安装Curl的方法
  7. 获得磁盘的飞鸽传书描述信息
  8. 免费的图标网站汇总,天气图标主题汇总
  9. python大盘点:全局变量、局部变量、类变量、实例变量
  10. sql server 流程控制
  11. odoo 对 many2many one2many的操作
  12. struts2 select标签
  13. 下载链接|从CAD2004到CAD2022下载安装软件,提升CAD施工图大师一点儿也不难!
  14. ApkAnalyser-APP开发框架分析器,查看APP是用Flutter还是ReactNative或是Weex
  15. 谷歌浏览器下载、安装、配置。(保姆级详细教程。)
  16. Win10运行红色警戒2尤里的复仇联机技巧+防守地图
  17. Beta周王者荣耀交流协会第五次Scrum会议
  18. Excel隔行求和计算公式
  19. java 生成word目录_java代码生成word目录
  20. 汉语是世界上最好的语言

热门文章

  1. C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)
  2. dataframe常用操作_Pandas | Dataframe的merge操作,像数据库一样尽情join
  3. linux运维和3dmax哪个简单,牛逼运维常用的工具系列-2
  4. linux怎么用命令备份数据库,使用linux的mysqlhotcopy命令备份数据库
  5. 计算机没有程序,计算机小知识:想尝试写程序却没有电脑?这个在线编辑器满足你...
  6. nginx配置php 9000,Nginx支持php配置
  7. 用lambda表达式实现Runnable
  8. 什么是CharSequence
  9. 数据库:Redis数据库优点介绍
  10. 盘点程序员必备的专业术语,值得看一看