SQLite使用动态类型系统,在SQLite中,值的数据类型和值本身,而不是和它的容器,关联在一起的。SQLite的动态类型系统和其他数据库引擎的静态类型系统是兼容的,这样在静态类型的数据库上执行的SQL语句也可以在SQLite中执行。

1.0 存储类和数据类型

每个存储在SQLite数据库中(或被数据库引擎操纵的)的值都有下列存储类的一个:

  • NULL。空值。
  • INTEGER。有符号整数,存储在1、2、3、4、6或8个字节中。
  • REAL。浮点数,存储为8字节的IEEE浮点数。
  • TEXT。文本串,使用数据库编码(UTF-8, UTF-16BE或UTF-16LE)存储。
  • BLOB。大块数据。

注意存储类(storage class)比数据类型更一般。INTEGER存储类,例如,包含6种长度不同的整数数据类型。这在磁盘中是有区别的。不过一旦INTEGER值从磁盘读到内容中进行处理的时候,这些值会转化为更普通的数据类型(8位有符号整数)。因此在大部分情况下,存储类和数据类型是不易分辨的,这两个术语可以交换使用。

在SQLite 3 数据库中,任何列,除了INTEGER PRIMARY KEY列,都可以存储任何存储类的值。

SQL语句中的所有值,不管是SQL语句中嵌入的字面值,还是预编译的SQL语句中的参数,都有一个隐式的存储类。在下面描述的条件下,在查询执行阶段,数据库引擎可能会在数字存储类(INTEGER和REAL)和TEXT存储类之间转换。

1.1 Boolean数据类型

SQLite没有单独的Boolean存储类,相反,Booean值以整数0(false)和1(true)存储。

1.2 日期和时间数据类型

SQLite没有为存储日期和/或时间设置专门的存储类,相反,内置的日期和时间函数能够把日期和时间作为TEXT,REAL或INTEGER值存储:

  • TEXT:作为ISO8601字符串("YYYY-MM-DD HH:MM:SS.SSS")。
  • REAL:作为Julian天数,……
  • INTEGER:作为Unix Time,即自1970-01-01 00:00:00 UTC以下的秒数。

2.0 类型相像(type affinity)

为了最大化SQLite和其他数据库引擎之间的兼容性,SQLite支持列的”类型相像“的概念。这里重要的思想是,类型是推荐的,不是必需的。任何列仍然能够存储任何类型的数据。只是某些列,能够选择优先使用某种存储类。这个对列的优先存储类称作它的”相像“。

SQLite 3 数据库中的每个列都赋予下面类型相像中的一个:

  • TEXT
  • NUMERIC
  • INTEGER
  • REAL
  • NONE

带有TEXT相像的列会使用存储类NULL、TEXT或BLOB来存储所有的数据。如果数据数据被插入到带有TEXT相像的列中,它会在插入前转换为文本格式。

带有NUMERIC相像的列可以使用所有5个存储类来包含值。当文本数据被插入到一个NUMERIC列,文本的存储类会被转换成INTEGER或REAL(为了优先),如果这个转换是无损的和可逆的话。如果TEXT到INTEGER或REAL的转换是不可能的,那么值会使用TEXT存储类存储。不会试图转换NULL或BLOB值。

……

2.1 列相像的确定

列相像是由列声明的类型确定的,规则是按照下面的顺序:

1. 如果声明的类型包含字符串”INT“那么它被赋予INTEGER相像。

2. 如果列声明的类型包含任何字符串”CHAR“,”CLOB“,或”TEXT“,那么此列拥有TEXT相像。注意类型VARCHAR包含”CHAR“,因此也会赋予TEXT相像。

3. 如果列声明的类型包含”BLOB“或没有指定类型,那么此列拥有NONE相像。

4. 如果列声明的类型包含任何”REAL“,”FLOA“,或”DOUB“,那么此列拥有REAL相像。

5. 其他情况,相像是NUMERIC。

注意规则的顺序是重要的。声明类型为“CHARINT”的列同时匹配规则1和规则2,但第一个规则会优先采用,因此此列的相像是INTEGER。

2.2 相像示例

示例 相像结果 规则
INT
INTEGER
TINYINT
SMALLINT
MEDIUMINT
BIGINT
UNSIGNED BIG INT
INT2
INT8
INETGER 1
CHARACTER(20)
VARCHAR(255)
VARYING CHARACTER(255)
NCHAR(55)
NATIVE CHARACTER(70)
NVARCHAR(100)
TEXT
CLOB
TEXT 2
BLOB
未指定数据类型
NONE 3
REAL
DOUBLE
DOUBLE PRECISION
FLOAT
REAL 4
NUMERIC
DECIMAL(10, 5)
BOOLEAN
DATE
DATETIME
NUMERIC 5

注意“FLOATING POINT”类型会指定INTEGER相像,而不是REAL相像,因为”INT“在末尾。”STRING“类型会拥有NUMERIC相像,而不是TEXT。

SQLite 3 中的数据类型的更多相关文章

  1. sqlite3中的数据类型

    大多数的数据库引擎(到现在据我们所知的除了sqlite的每个sql数据库引擎)都使用静态的.刚性的类型,使用静态类型,数据的类型就由它的容器决定,这个容器是这个指被存放的特定列. Sqlite使用一个 ...

  2. SQLite使用教程3 数据类型

    http://www.runoob.com/sqlite/sqlite-data-types.html SQLite 数据类型 SQLite 数据类型是一个用来指定任何对象的数据类型的属性.SQLit ...

  3. 数据库 - SQLite3 中的数据类型

    ------------------------------ 安装 Sqlite3 和 数据库查看工具: sudo apt-get install sqlite3 sudo apt-get insta ...

  4. Sqlite-Sqlite3中的数据类型

    大多数的数据库引擎(到现在据我们所知的除了sqlite的每个sql数据库引擎)都使用静态的.刚性的类型,使用静态类型,数据的类型就由它的容器决定,这个容器是这个指被存放的特定列. Sqlite使用一个 ...

  5. 【SQLite】教程04-SQLite数据类型

    SQLite 存储类 每个存储在 SQLite 数据库中的值都具有以下存储类之一: 存储类 描述 NULL 值是一个 NULL 值. INTEGER 值是一个带符号的整数,根据值的大小存储在 1.2. ...

  6. JavaScript 中的数据类型

    Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...

  7. hibernate中java类的成员变量类型如何映射到SQL中的数据类型变化

    hibernate映射文件??.hbm.xml配置映射元素详解--Hibernate映射类型 在从Hibernate的java的成员类型映射到SQL中的数据类型,其内映射方式它满足,SQL可以自己调制 ...

  8. js中的数据类型

    JS中的数据类型: ——数字  (number)NaN ——字符串(string) ——布尔  (boolean)——函数  (function)     也是对象的一种 ——对象  (object) ...

  9. 如何判断js中的数据类型?

    js六大数据类型:number.string.object.Boolean.null.undefined string: 由单引号或双引号来说明,如"string" number: ...

随机推荐

  1. Unable to open debugger port (127.0.0.1:13249): java.net.BindException "Address already in use: JVM_Bind"

    这个问题比较简单一点,Tomcat的端口被占用了,我使用的是IDEA里的一个热部署插件JReble,更新了IDEA之后就发现端口被占用了,可能我电脑没有重启过吧, 一直被占用着,所以解决方法就是更换一 ...

  2. Longest Ordered Subsequence POJ - 2533 dp 最长上升/不下降 子序列

    #include<iostream> using namespace std ; ; int f[N]; int a[N]; int n; int main() { cin>> ...

  3. Linux下用Bash语言实现判断素数的功能

    题目链接: 题目描述 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息. 输入 一个数 输出 如果是素数输出prime 如果不是输出not prime 样例输入 97 样例输出 pri ...

  4. 【资源分享】Gmod自瞄自动开枪脚本

    *----------------------------------------------[下载区]----------------------------------------------* ...

  5. centos yum 安装openresty

    yum 安装openresty sudo yum install yum-utils -y sudo yum-config-manager --add-repo https://openresty.o ...

  6. 静态区间第k小 - 整体二分

    蒟蒻终于学会整体二分啦! 思路 实现 丑陋无比的代码 #include <bits/stdc++.h> using namespace std; const int N = 200005; ...

  7. ActiveMQ的p2p模式与发布订阅模式

    1.消息中间件:采用异步通讯防止,支持点对点以及发布订阅模式,可以解决高并发问题        传统调用接口,可能发生阻塞,重复提交,超时等等问题,可以利用消息中间件发送异步通讯请求          ...

  8. Ubuntu 18.04 怎么安装Gnome Tweak Tool

    地址:https://jingyan.baidu.com/article/86f4a73ebd6c9437d7526963.html 终端键入命令:[sudo add-apt-repository u ...

  9. 立即关机C++源码

    #include<windows.h> using namespace std; int main(){ system("shutdown /p"); return 0 ...

  10. Harris角点检测理论

     这样想象一下,直线上的一个点在垂直于直线的方向上有最强的梯度.沿着直线的方向梯度较低,意思是直线上的像素点与它周围的像素点看起来相似.我们进行的角点检测是梯度强度明显高于其他像素的点,可能就是目标处 ...