SQLite 数据类型参考手册
与大多数刚性类型的关系型数据库(如 MySQL、PostgreSQL 或 Oracle)不同,SQLite 采用了独特的动态类型系统(Dynamic Typing)。在 SQLite 中,值的数据类型与值本身相关联,而不是与其存储的列相关联。
即使列在建表时声明了某种类型,它仍然可以存储任何类型的数据(除 INTEGER PRIMARY KEY 外)。
五大核心存储类(Storage Classes)
SQLite 数据库中的每一个存储值都归属于以下五种基本存储类之一:
- NULL:表示空值或未知值。
- INTEGER:有符号整数,根据数值大小在磁盘上动态存储为 1、2、3、4、6 或 8 字节。
- REAL:浮点数值,按 8 字节 IEEE 浮点数格式存储。
- TEXT:文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。
- BLOB:二进制大对象,完全按照输入的原始字节数据存储,不进行任何转换。
此外,SQLite 针对列定义还支持 NUMERIC 亲和性,它既可以容纳整型也可以容纳浮点型数据。
列的类型亲和性(Type Affinity)速查表
在 CREATE TABLE 中声明列的数据类型时,SQLite 会将其映射为五种亲和性类型之一:
| 声明的数据类型(示例) | 推导出的类型亲和性 | 行为说明 |
|---|---|---|
INT, INTEGER, TINYINT, BIGINT |
INTEGER | 尝试将文本转换为整型;无法转换时保留原类型 |
CHAR, VARCHAR, TEXT, CLOB |
TEXT | 将数值转为文本格式存储 |
BLOB, 未指定任何类型 |
BLOB (NONE) | 不做任何类型强制转换,原样保留 |
REAL, DOUBLE, FLOAT |
REAL | 尝试转为 8 字节浮点数存储 |
NUMERIC, DECIMAL, BOOLEAN, DATE |
NUMERIC | 优先尝试转换为整数或浮点数 |
常用开发实测工具
想要快速上手和验证 SQLite 数据类型的实际存储行为?推荐使用站内内置的在线工具:
- ⚡ SQLite 在线演练场 (WebAssembly):无需本地安装任何软件,在浏览器中即可直接创建 SQLite 表并执行查询。
- 📊 SQL 模拟测试数据生成器:支持自动识别 SQLite 表结构,一键生成包含 NULL、中文姓名、自增 ID 等字段的大批量 SQL 插入语句。