SQLite 的 INTEGER 类型是如何存储的?

推荐答案

在 SQLite 中,INTEGER 类型的数据是以可变长度的方式存储的。具体来说,SQLite 会根据整数值的大小,自动选择最节省空间的存储方式。INTEGER 类型可以存储 1、2、3、4、6 或 8 字节的有符号整数。

本题详细解读

存储机制

SQLite 使用动态类型系统,这意味着数据的存储方式取决于数据的实际值,而不是声明的类型。对于 INTEGER 类型,SQLite 会根据整数值的大小选择不同的存储格式:

  • 1 字节:存储范围为 -128 到 127。
  • 2 字节:存储范围为 -32,768 到 32,767。
  • 3 字节:存储范围为 -8,388,608 到 8,388,607。
  • 4 字节:存储范围为 -2,147,483,648 到 2,147,483,647。
  • 6 字节:存储范围为 -140,737,488,355,328 到 140,737,488,355,327。
  • 8 字节:存储范围为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。

存储优化

SQLite 的这种存储方式使得它能够根据实际数据的大小来优化存储空间。例如,如果一个 INTEGER 列中的值大部分都很小,SQLite 会使用较少的字节来存储这些值,从而节省存储空间。

类型亲和性

尽管 SQLite 使用动态类型系统,但它仍然支持类型亲和性(Type Affinity)。对于声明为 INTEGER 的列,SQLite 会优先尝试将插入的数据转换为整数类型。如果转换失败,SQLite 会按照实际的数据类型进行存储。

示例

假设有一个表 test,其中有一列 id 声明为 INTEGER

插入不同大小的整数时,SQLite 会自动选择最合适的存储方式:

通过这种方式,SQLite 在保证数据完整性的同时,最大限度地优化了存储空间的使用。

纠错
反馈