Datatypes In SQLite Version 3
绝大多数数据库引擎都是用静态 (除 SQLite之外的其他所有 SQL数据库引擎 ), 硬性的数据类
型. 使用静态数据类型的情况下 , 数据类型会被其容器检查 –也就是存储该值的列 .
SQLite 使用一个更加通用的类型系统 . 在 SQLite中, 值的数据类型是和值本身相关联的 , 而
不是其容器决定的 . SQLite的动态数据类型向后兼容其他较常见的使用静态数据类型的数据
库系统 , 即在静态数据类型数据库系统上使用的 SQL语句同样适用于 SQLite. 但是在 SQLite
上进行的动态数据类型操作却不可能适用于传统的静态数据类型的数据库系统 .
1.0 Storage Classes and Datatypes
每一个存储在 SQLite(或者被数据库引擎操纵 )数据库系统中的值必定属于以下几个类型中的
一个 :
NULL. 值为 NULL
INTEGER. 有符号的整形数值 , 按数值大小以 1,2,3,41,2,3,4,6 或 8 字节存储 .
REAL. 浮点数值 , 以 8 字节 IEEE标准浮点数存储 .
TEXT. 文本字符串 , 以数据库的字符编码方式存储 (UTF-8, UTF-16BE或者 UTF-16LE).
BLOB. 该值是一个 BLOB数据 , 将以与输入时一致的二进制码存储 .
存储类型相比数据类型是更加通用的 . 比如说 INTEGER存储类包含 6 种不同长度的整形数据
类型 . 虽然以上 6 种类型是以不同方式存储在磁盘上 , 但 INTEGER数据一旦从磁盘里读取到
内存中用于处理是 , 所有的 6 种类型都会被转换为最通用的数据类型 (8 字节有符号整数 ). 因
此大部分情况下 , “存储类型 ”与”数据类型 ”并没有什么分别 , 可以相互替换表示 .
SQLite3 中的任何列 , 除 INTEGERPRIMARY KEY之外 , 可以以任何存储类型 (storage class)存储
一个值 .
SQL语句中所有的值 , 无论他们是以纯文本方式嵌入到 SQL语句中还是以预编译方式绑定到
SQL语句的参数都有一个隐含的存储类型 . 在下述的氛围下 , 数据库引擎可能会在查询执行
过程中将值在数值型存储类型 (INTEGER和 REAL)和文本型存储类型 (TEXT)之间转换 .
1.1 Boolean Datatype
SQLite没有单独的布尔存储类型 . 在 SQLite 中, 布尔值 , 真被存储为整形数值 1, 假被存储为
整形数值 0.
1.2 Date and Time Datatype
SQLite没有单独的日期和时间存储类型 . 作为替代的是 ,SQLite内建的日期和时间函数可用于
处理以 TEXT, REAL或 INTEGER方式存储的日期 :
TEXT 以 ISO8601 标准表示的字符串 ( “ YYYY-MM- DD HH:MM:SS.SSS” ).
REAL以 Julian day, 公元前 4714 年 11 月 24 日至日期所经历的天数 .
INTEGER以 Unix 时间方式表示 , 即 1970-01-01 00:00:00 UTC 至日期所经历的秒数 .