SQLite入门之数据类型

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

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Tika基础教程之一】Tika基础教程

一、快速入门 1、Tika是一个用于文本解释的框架,其本身并不提供任何的库用于解释文本,而是调用各种各样的库,如POI,PDFBox等。 使用Tika,可以提取文件中的作者、标题、创建时间、正文等内容,相比于java.io自…

它是世界上最轻的固体!1000℃下不会熔化,上过火星,还能进你家......

全世界只有3.14 % 的人关注了爆炸吧知识小果冻大难关开学了,8岁表妹逮着这个机会讹了我一大箱果冻,超模君糊里糊涂就进了这只神兽的套。今天估计是一口气吃了太多,腻了,一边用手敲着果冻一边问超模君:“这果冻这么软&a…

使用C#快速生成二维码 | 真正跨平台方案

前言二维码(QR Code),与传统的一维码,比如条形码,二维码具有存储的数据量更大;可以包含数字、字符,及中文文本等混合内容;有一定的容错性(在部分损坏以后还可以正常读取&…

制作一个类似苹果VFL的格式化语言来描述UIStackView

在项目中总是希望页面上各处的文字,颜色,字体大小甚至各个视图控件布局都能够在发版之后能够修改以弥补一些前期考虑不周,或者根据统计数据能够随时进行调整,当然是各个版本都能够统一变化。看到这样的要求后,第一反应…

[Android] TextView 分页功能的实现

为什么80%的码农都做不了架构师?>>> 分页功能是阅读器类软件的基本功能之一, 也是自己之前写阅读器时遇到的第一个问题. 尝试了不少办法才解决, 现在把其中最容易实现的一个方法记录下来, 也方便大家参考. 基本思路如下: 从文件中读取 8000 个字符至缓冲…

把男朋友变成儿子你只需要一秒

1 别人以为的我▼2 幸好有监控,差点就没法和老婆解释了!▼3 为了卖化妆品我已经不止一次假装我有一群舔狗了▼4 这么多年下来班主任的这些套路谁还不清楚呢?▼5 司机同志们注意啦要主动停车接受检查▼6 让男友变儿子你只需要一秒钟▼7 …

容器界的新“朋友”

微软中国MSDN 点击上方蓝字关注我们Ignite 2021 上,微软发布了Azure Container Apps,这是一种以无服务器应用程序为中心的托管服务,用户看不到或无需管理任何底层 VM、协调器或其他云基础架构。Azure Container Apps支持打包在容器中的任何应…

史上最“可怕”的数学科普,能全都看懂的只有天才!

▲ 点击查看我们在生活中,或许最常听到的一句话就是:“数学是工具”。在《数学家的眼光》一书的开篇中,张景中院士却举了一个颠覆我们平常认知的例子:大数学家陈省身有一次在北京大学的讲座中语惊四座:“人们常说三角形…

.NET6之MiniAPI(五):选项

选项是配置一个升级版,一般情况下是把一个范围内的配置包装成类型,以供使用,比如下面的RedisSetting,是Redis的配置参数:{"Logging": {"LogLevel": {"Default": "Information"…

Android之项目中调用已有.so库

注意该.so库指的是android平台的,非一般linux、unix平台; 1、现有库libcom_ycan_testLib.so 2、新建android项目TestLib2 3、添加新类: 类名:testLib 包路径:参考现有库名,应为com.ycan 4、在新类中声明库的…

iNeuOS工业互联网操作系统,矿山动态产量计量系统和铁路车辆识别系统应用场景案例...

目 录1. 概述... 22. 平台演示... 23. 矿山动态产量计量系统... 24. 铁路车辆识别系统... 41. 概述iNeuOS工业互联网操作系统增加矿山动态产量计量和铁路车辆识别系统,提高矿山动态产量计量精度和完全避免产量核实误差的情况&#xff1…

85元一个万能工具箱,配齐24种螺丝刀+扳手,媲美德国工艺,家庭必备

▲ 点击查看对当代的男生来说,有什么技能是必须掌握的?自然是修理各种各样的东西啦~除了修电脑,还要修各种电器啊、家具啊之类的,讲真,会修理的男人都很帅!实用性能也满分,相当于女孩子会做饭一…

poj1505

题意:给出一个数列有n个数,要求用分割分把这个数列分成m段,不能改变原数列的顺序。每段至少一个数。求使得加和最大的那段的加和最小的划分方案。如果有多组解的话先要保证第一段和尽量小,若仍有多组解,要先保证第二段…

mysql出现连接错误不识别 utf8mb4

2019独角兽企业重金招聘Python工程师标准>>> 出现这样的错误,指的是不识别该字符集。 可能是 数据库 里面配置 或者是 连接属性 配置了该字符集那么修改回来即可。 还有一种情况就是 ,java-connert-sql连接包,版本太低了。比如 低…

一行代码完成定时任务调度,基于Quartz的UI可视化操作组件 GZY.Quartz.MUI

前言之前发布过第一个版本,有兴趣的可以去看看: NET Core 基于Quartz的UI可视化操作组件 GZY.Quartz.MUI 简介GitHub开源地址:l2999019/GZY.Quartz.MUI: 基于Quartz的轻量级,注入化的UI组件 总而言之,这个组件主要想做的就是:像swaggerUI一样,项目入侵量小,仅需要在Startup中注…

越绿自己,就会越强?

1 我们要求不高的(素材来源网络,侵删)▼2 小区的猫竟然通过监控抓老鼠(素材来源网络,侵删)▼3 不同职业的相亲对象(素材来源网络,侵删)▼4 别人家的年终奖&#xff0c…

Lync Server 2010迁移至Lync Server 2013部署系列 Part18:开启Lync 2013 Mobility

当我们将内部Lync 功能开通后,我们除了需要发布边缘开启外部登录功能外,我们还需要向用户提供Lync 手机登录功能,那么在今天的博文中我们就介绍一下关于如何开启Lync Mobility功能,就Lync 2013来讲,我个人认为开启Mobi…

使用springfox 集成swagger 与spring mvc

2019独角兽企业重金招聘Python工程师标准>>> 创建一个maven 模块 将springfox相关的配置都配置在一个单独的api模块中&#xff0c;可以把这个模块当成web应用跑起来。 <pluginRepositories> <pluginRepository> <id>jcenter-snapshots</id>…

技术分享 | CodeReview主要Review什么?

源宝导读&#xff1a;Code Review, 意即代码审查,是指一种有意识和系统的召集其他程序员来检查彼此的代码是否有错误的地方. 在敏捷团队中推行CodeReview, 可以帮助团队快速成长.本文将分享在"天际-建模平台"如何推行&实践CodeReview。一、为什么要 Code Review?…

你尿尿的时长是不是21秒?2次登上Nature封面的他,靠研究拉尿获得“诺贝尔奖”.........

全世界只有3.14 % 的人关注了爆炸吧知识男人的快乐就是这么朴实无华为什么蚊子不会被雨滴砸死&#xff1f;这个发在知乎上会被质疑患有十年脑血栓的问题&#xff0c;获得了2015年的中国搞笑诺贝尔奖——菠萝科学奖。获奖者结束获奖感言的方式也很搞笑&#xff1a;这个直接在“诺…