SQLite 中的数据类型与其他数据库管理系统不同。在 SQLite 中,你可以正常声明数据类型,但你仍然可以在任何数据类型中存储任何值。

SQLite 的数据类型较少。没有数据类型,您可以在任何列中存储任何类型的数据。这就是所谓的动态类型。

在静态类型中,如在其他数据库管理系统中,如果声明的列的数据类型为整数,则只能插入整数数据类型的值。但在 SQLite 等动态类型中,列的类型由插入的值决定。然后,SQLite 会根据值的类型存储该值。

SQLite 存储类

在 SQLite 中,根据值的类型有不同的存储方法,这些不同的存储方法在 SQLite 中称为存储类。

以下是 SQLite 中可用的存储类:

  • NULL – 该存储类用于存储任何 NULL 值。
  • INTEGER – 任何数值都以带符号整数值的形式存储(可存储正负整数值)。SQLite 中的 INTEGER 值会根据数值的大小存储在 1、2、3、4、6 或 8 字节的存储空间中。
  • REAL – 该存储类用于存储浮点数值,它们被存储在 8 字节的存储空间中。
  • TEXT – 存储文本字符串。它还支持不同的编码,如 UTF-8、UTF-16 BE 或 UTF-26LE。
  • BLOB – 用于存储大型文件,如图像或文本文件。其值以与输入值相同的字节数组形式存储。

SQLite 亲和类型

亲和类型是存储在列中的推荐数据类型。不过,您仍然可以存储任何类型的数据,这些类型只是推荐而非必需。

在 SQLite 中引入这些类型是为了最大限度地提高 SQLite 与其他数据库管理系统的兼容性。

在 SQLite 数据库中声明的任何列都会根据其声明的数据类型分配一个类型亲和性。下面是 SQLite 中类型亲和性的提升:

  • TEXT.
  • NUMERIC.
  • INTEGER.
  • REAL.
  • BLOB.

以下是 SQLite 如何根据列声明的数据类型确定列的亲和性:

  1. 如果声明的类型包含字符串 “INT”,则会分配 INTEGER 亲和性。
  2. 如果列的数据类型包含以下字符串之一:“ TEXT ”、“ CHAR ”或“ CLOB ”,则会分配文本亲和性。例如,VARCHAR 类型将被分配为 TEXT 亲和性。
  3. 如果列没有指定类型或数据类型为 BLOB,则会分配 BLOB 亲和性。
  4. 如果类型包含以下字符串之一:“ DOUB ”、“ REAL ”或“ FLOAT ”,则会分配 REAL 亲和性。
  5. 任何其他数据类型都会分配 NUMERIC 亲和性。

同一页中还有一个表格,显示了 SQLite 数据类型与根据这些规则确定的亲和性之间映射的一些示例:

SQLite 数据类型

在 SQLite 中存储数据类型的示例:

使用 SQLite 整数存储数字:

任何列的数据类型中包含 “INT ”字样,它将被分配为 INTEGER 类型亲和。它将存储在 INTEGER 存储类中。

以下所有数据类型都被指定为 INTEGER 亲和型:

  • INT, INTEGER, BIGINT.
  • INT2, INT4, INT8.
  • TINYINT, SMALLINT, MEDIUM INT.

SQLite 中的 INTEGER 类型亲和性可容纳从 1 字节到最大 8 字节的任何指定整数(正数或负数)。

使用 SQLite REAL 存储数字:

REAL 数是具有双浮点精度的数字。SQLite 将实数存储为 8 字节数组。以下是 SQLite 中可用于存储 REAL 数的数据类型列表:

  • REAL.
  • DOUBLE.
  • DOUBLE PRECISION.
  • FLOAT.

使用 SQLite BLOB 存储大型数据:

在 SQLite 数据库中存储大型文件只有一种方法,那就是使用 BLOB 数据类型。这种数据类型用于存储大型文件,如图像、文件(任何类型)等。文件被转换成字节数组,然后以与输入文件相同的大小存储。

存储 SQLite 布尔值:

SQLite 没有单独的 BOOLEAN 存储类。不过,BOOLEAN 值会存储为数值为 0(假)或 1(真)的 INTEGERS。

存储 SQLite 日期和时间:

您可以使用以下数据类型之一在 SQLite 中声明日期或日期时间:

  • DATE
  • DATETIME
  • TIMESTAMP
  • TIME

请注意,SQLite 中没有单独的 DATE 或 DATETIME 存储类。相反,使用前一种数据类型声明的任何值都会根据插入值的日期格式存储在一个存储类中,如下所示:

  • TEXT – 如果以 ISO8601 字符串格式(“YYYY-MM-DD HH : MM : SS”)插入日期值。
  • REAL – 如果您以儒略日数插入日期值,即自公元前 4714 年 11 月 24 日格林威治正午起的天数,那么日期值将以 REAL 格式存储。
  • INTEGER 作为 Unix 时间,即自 1970-01-01 00:00:00 UTC 起的秒数。

摘要:

SQLite 支持多种数据类型。但同时,它在数据类型方面也非常灵活。你可以在任何数据类型中放入任何值类型。与其他数据库管理系统不同,SQLite 还在数据类型中引入了一些新概念,如类型亲和性和存储类。