SQLite 是一种采用动态类型系统的轻量级数据库,这意味着变量的数据类型是与值相关而不是与列绑定的。尽管如此,SQLite 仍支持类型亲和(Type Affinity)机制来保证数据一致性与行为的可预测性。
📚 目录
1. SQLite 的类型系统特点
SQLite 不像 MySQL 或 PostgreSQL 一样强制列的数据类型。它采用「类型亲和」策略,允许某些灵活的存储行为。
主要特点:
- 动态类型系统:列可存储不同类型的数据(不推荐)
- 类型亲和:SQLite 尝试将值转换为最合适的类型再存储
- 强制约束少:开发者需要自行维护数据一致性
2. 五种类型亲和(Type Affinity)
SQLite 会将声明的列类型转换为下列五种「类型亲和性」:
亲和类型 | 描述 |
---|---|
TEXT | 用于文本内容(字符串) |
NUMERIC | 默认亲和类型,能处理整数、浮点数、日期 |
INTEGER | 优先以整数形式存储 |
REAL | 浮点数(8字节 IEEE) |
BLOB | 原样存储二进制数据 |
3. 常见类型与映射关系
SQLite 并不识别标准 SQL 中的所有数据类型,而是将它们映射为内部亲和类型:
声明类型(举例) | 映射结果(亲和性) |
---|---|
VARCHAR(255) | TEXT |
INT , TINYINT , BIGINT | INTEGER |
DECIMAL(10,2) , NUMERIC | NUMERIC |
FLOAT , DOUBLE | REAL |
CHARACTER , TEXT | TEXT |
BOOLEAN | NUMERIC |
BLOB , BINARY | BLOB |
4. 类型存储行为示例
CREATE TABLE test (
a TEXT,
b INTEGER,
c REAL,
d NUMERIC,
e BLOB
);
INSERT INTO test VALUES ('100', '100', '100', '100', '100');
SELECT typeof(a), typeof(b), typeof(c), typeof(d), typeof(e) FROM test;
输出可能为:
text | integer | real | integer | blob
💡 SQLite 会根据实际数据和列亲和性动态决定最终存储的数据类型。
5. 参考资料与链接
如需了解更多关于 SQLite 类型约束、性能优化与实际建模技巧,欢迎访问 www.52kanjuqing.com,持续更新 SQLite 实用技巧与案例教程。
需要我继续处理下一个问题吗?比如 “SQLite 创建数据库”?我也可以帮你封装成自动化脚本形式。
发表回复