SQLite3中的数据类型

本文介绍了SQLite数据库采用的动态类型系统特点,与静态类型系统的区别,以及如何支持多种数据存储类型,包括NULL、INTEGER、REAL、TEXT和BLOB。探讨了这种设计带来的灵活性及其潜在的性能影响。
SQLite 使用的是一个更加普通的动态类型系统。在 SQLite 中,数据类型的值是与值的本身有关联,而不是它的容器。SQLite 的动态类型系统对于更多其它数据库引擎常见的静态类型系统是向后兼容的,在这个意义上,工作在静态类型数据库上的 SQL 语句同样也能工作在 SQLite 中。然而,SQLite 中的动态类型允许它做一些在传统严格类型数据库中不能做的事情。

因为SQLite是动态类型系统,所以可以指定任意的存储类型,这样意味着它有着良好的兼容性,你的[b]Oracle语句几乎可以一丝不改的在SQLite上执行[/b](不包括序列等),同时你也会发现它比静态类型数据库要慢的多。动态类型系统是SQLite的优点,也是它的缺点。

大多数 SQL 数据库引擎(据我们所知的、SQLite 以外的所有 SQL 数据库引擎)使用静态的、严格的类型。对于静态类型,数据类型的值由它的容器(存储值的特定列)来决定。

存储在 SQLite 数据库中的每个值(或者由数据库引擎操纵的值)都是以下的存储类之一:
NULL   该值是一个 NULL 值
INTEGER 该值是一个有符号的整数,根据值的大小,存储 1、2、3、4、5、6 或 8 字节内容
REAL   该值是一个浮点值,存储一个 8 字节的 IEEE 浮点数
TEXT   该值是一个文本字符串,使用数据库编码(UTF-8、 UTF-16BE 或 UTF-16LE)进行存储
BLOB   该值是一个数据块,按照它的输入直接存储

注意,一个存储类要略普遍于一个数据类型。INTEGER 存储类,例如,包含不同长度的 6 个不同的整数类型。这在磁盘上是不同的。但是一旦 INTEGER 值从磁盘读取到内存进行处理,它们都将被转换为最普通的数据类型(8 字节有符号的整数)。因此大部分“存储类”是无异于“数据类型”的,并且有 2 个条款能被互换地使用。

在一个 SQLite 版本 3 数据库中的任何列,除了 INTEGER PRIMARY KEY 列,都可以被用来存储一个任意存储类的值。

SQL 语句中的所有值,无论它们是嵌入在 SQL 语句文本里的字面量,还是绑定到预编译 SQL 语句的参数,都有一个内在存储类。在以下描述的情况中,数据库引擎会在执行查询过程中,在数字存储类(INTEGER 和 REAL)和 TEXT 之间进行转换。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值