`
pxq19890719
  • 浏览: 50742 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于sqlite的存储类型

阅读更多
SQLite与其他常见的DBMS的最大不同是它对数据类型的支持。其他常见的DBMS通常支持强类型的数据,也就是每一列的类型都必须预先 指定,但是SQLite采用的是弱类型的字段。实际上,其内部仅有下列五种存储类型:

NULL: 表示一个NULL值

INTEGER: 用来存储一个整数,根据大小可以使用1,2,3,4,6,8位来存储.

REAL: IEEE 浮点数

TEXT: 按照字符串来存储

BLOB: 按照二进制值存储,不做任何改变.

要注意,这些类型是值本身的属性,而不是列的属性.

但是为了和其他DBMS(以及SQL标准)兼容,在其create table语句中可以指定列的类型,为此,SQLite有个列相似性的概念(Column Affinity). 列相似性是列的属性,SQLite有以下几种列相似性:

TEXT: TEXT列使用NULL,TEXT或者BLOB存储任何插入到此列的数据,如果数据是数字,则转换为TEXT.

NUMERIC: NUMERIC列可以使用任何存储类型,它首先试图将插入的数据转换为REAL或INTEGER型的,如果成功则存储为REAL和INTEGER型,否则 不加改变的存入.

INTEGER:和NUMERIC类似,只是它将可以转换为INTEGER值都转换为 INTEGER,如果是REAL型,且没有小数部分,也转为INTEGER

REAL: 和NUMERIC类型 只是它将可以转换为REAL和INTEGER值都转换为REAL.

NONE:不做任何改变的尝试.

SQLite根据create table语句来决定每个列的列相似性.规则如下(大小写均忽略):

1. 如果数据类型中包括INT,则是INTEGER

2. 如果数据类型中包括CHAR,CLOB,TEXT则是TEXT

3. 如果数据类型中包括BLOB,或者没有指定数据类型,则是NONE

4. 如果数据类型中包括REAL,FLOA或者DOUB,则是REAL

5. 其余的情况都是NUMERIC

由上可知,对于sqlite来说 char,varchar,nchar,nvarchar等都是等价的,且后面最大长度也是没有意义的。但是对于其他DBMS却不是相同的。另外,列相似 性仅仅是向Sqlite提出了一个存储数据的建议,即使实际存储的数据类型和列相似性不一致,SQLite还是可以成功插入的,下面给出一个例子来说明下 以上论述,注意,这个例子需要在SQLite的命令行下运行,如果在SQLite Expert工具下执行,SQLite会进行一些额外的处理。
分享到:
评论

相关推荐

    使用SQLite存储带有照片的联系人管理信息

    本示例使用SQLite存储带有照片的联系人管理信息, 一般由 BINARY 类型字段保存图像

    SQLite存储对象类型的数据

    受大神启发,特对其代码进行了注释,功能完善等处理

    Sqlite3时间存储格式问题?

    sqlite3数据库中时间字段的定义格式:Sqlite没有另外为存储日期和时间设定一个存储类集,内置的sqlite日期和时间函数能够将日期和时间以TEXT,REAL或INTEGER形式存放

    SQLiteDB的PHP实现

    * SQLite PDO 操作类 * ... * * @property array $table:protected 所有表 * @property array $queryList:protected 发送查询列表 * @property boolean $debug:protected ... * SQLite存储查询类型 SQLiteQuery *

    Sqlite3中存储类型和数据类型结合文档解析1

    声明类型为”STRING”的将被赋予NUMERIC,不是TEXT。(不动可以看2.1的规则,这是用了规则5)(从上面可以看出,sqlite3只是从声明类型字符串

    【Android基础】Android SQLite存储自定义对象实例

    这是一个Android系统中SQLite数据库存储自定义对象的实例,具体做法是:将对象序列化为字节流字符串,然后将字节流字符串以TEXT类型存储在数据库中;在取数据时,将字节流反序列化为对象就行了。所以我们的实体类得...

    swift-SQLite.swift一个类型安全SQLite3封装

    纯 Swift 实现的类型安全的 SQLite3 封装,数据存储和 JSON 解析是永恒的话题

    sqlite实现登录

    目前在Android 系统中集成的是 SQLite3 版本 ,SQLite 不支持静态数据类型 , 而是使用列关系 。 这意味着它的数据类型不具有表列属性 , 而具有数据本身的属性 。 当某个值插入数据库时, SQLite 将检查它的类型。...

    Android数据存储之SQLite使用

    在Android中创建的SQLite数据库存储在:/data/data/<包名>/databases/目录下。 主要特点: -轻量级 -独立性,没有不依赖,无需安装 -跨平台,支持众多操作系统 -支持高达2TB大小的数据库 -每个数据库以单个文件的...

    sqlite3.08源码包及使用指南

    整个数据库存储在一个单一的文件中。数据库文件可以在不同字节序的机器之间自由地共享。 支持最大可达2T的数据库。字符串和BLOB类型的大小只受限于可用内存。完整配置的少于250KB,忽略一些可选特性的少于150KB。 在...

    IP地理位置数据库中文版SQLite版

    IP地址用整型数字存储。 对应的位置信息是:国家/地区名,加上具体的省市区名,以及ISP、接入手段,甚至更确切的位置(如公司、网吧)等详细信息。例如:“中国[广东省深圳市南山区 电信]”。 这个IP地址数据库是...

    自己封装的log存储类,用到qt自带的sqlite

    2.该类将log保存到sqlite数据库中,数据库的表包括“id,时间戳,日期,时间,log等级,log内容”,变量类型如下:(id INTEGER PRIMARY KEY autoincrement,Timestamp BIGINT,Date text,Time text,Level text,LogInfo...

    sqlite数据库 boolean类型的小小测试

     sqlite数据库中没有单独的Boolean存储类,Booean值以0(false)和1(true)来存储.  经我短时间测试的实践, 显示boolean 有三种状态, 0(false) 1(true) 和 null,如下图所示,  经过下列插入语句,测试,均可...

    SQLite转换工具SqlConverter

    SQLite转换工具SqlConverter,支持从SQL Server转换为SQLite,能够附带结构和数据。

    SQLite学习手册(带目录)

    一、存储种类和数据类型 二、类型亲缘性 三、比较表达式 四、操作符 SQLite学习手册(命令行工具) SQLite学习手册(在线备份) 一、常用备份 二、在线备份APIs简介 三、高级应用技巧 SQLite学习手册(内存数据库) 一、...

    将硬盘中数千万零碎资源文件存储到 SQLite 的 BLOB 类型字段中,并能对外发布 HTTP 服务供访问

    软件特点:可通过操作面板扫描本地文件夹,导入数以千万的文件数据,进行统一压缩,以 BLOB 类型存储在一个 SQLite 数据库文件中,迁移(备份)数据时能极大提升文件复制速度。支持将资源数据库中的文件数据发布成 ...

    VS、VC++实现对象序列化保存到sqlite表blob类型字段中,包含blob字段的读取和保存,

    VS、VC++实现对象序列化保存到sqlite表blob类型字段中,包含blob字段的读取和保存,文档中有代码及说明实例。

    Sqlite大对象字段读写及数据流的解压缩

    1. 利用Sqlite创建BLOB类型字段,可用于图片或数据流的存储; 2. 实现BLOB类型字段的读写; 3. 利用ZlibNet对二进制字节流进行数据解压缩;

    SQLite 数据库

    SQLite是一个小型的C程序库,实现了独立的,可嵌入的,零配置的SQL数据库引擎。特性包括: 事务操作是原子,一致,孤立,并且持久的(ACID),即使在系统崩溃和电源故障之后。 零配置——不需要安装和管理。 实现...

Global site tag (gtag.js) - Google Analytics