SQLite 支持多种数据类型,采用动态类型系统:
-
存储类(Storage Classes)
- NULL:空值
- INTEGER:有符号整数,根据值大小自动选择 1、2、3、4、6 或 8 字节存储
- REAL:浮点数,8 字节 IEEE 浮点数
- TEXT:字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储
- BLOB:二进制大对象,完全按照输入存储
-
类型亲和性(Type Affinity) SQLite 使用类型亲和性来处理数据类型,而不是严格的类型检查:
- TEXT:用于存储字符串,使用 TEXT 存储类
- NUMERIC:可能包含整数或浮点数的值,转换为 INTEGER 或 REAL
- INTEGER:与 NUMERIC 类似,但优先转换为 INTEGER
- REAL:与 NUMERIC 类似,但优先转换为 REAL
- NONE:不进行类型转换
-
动态类型特点
- 可以在同一列中存储不同类型的数据
- 插入数据时,SQLite 会根据值的类型和列的类型亲和性选择合适的存储类
- 查询时可以动态转换数据类型
-
类型转换规则
- 当向具有 INTEGER 亲和性的列插入文本时,SQLite 会尝试将其转换为整数
- 当向具有 REAL 亲和性的列插入整数时,会转换为浮点数
- 如果转换失败,则存储原始值
这种灵活的类型系统使得 SQLite 能够适应各种应用场景,但也要求开发者更加注意数据类型的一致性。