SQLite 是一种采用动态类型系统的轻量级数据库,这意味着变量的数据类型是与值相关而不是与列绑定的。尽管如此,SQLite 仍支持类型亲和(Type Affinity)机制来保证数据一致性与行为的可预测性。


📚 目录

  1. SQLite 的类型系统特点
  2. 五种类型亲和(Type Affinity)
  3. 常见类型与映射关系
  4. 类型存储行为示例
  5. 参考资料与链接

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, BIGINTINTEGER
DECIMAL(10,2), NUMERICNUMERIC
FLOAT, DOUBLEREAL
CHARACTER, TEXTTEXT
BOOLEANNUMERIC
BLOB, BINARYBLOB

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 创建数据库”?我也可以帮你封装成自动化脚本形式。