SQLite 数据类型及示例:Int、Text、Numeric、Real、Blob

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

SQLite 类型较少。没有数据类型,您可以将任何类型的数据存储在任何列中。这称为动态类型。

在静态类型中,与其它数据库管理系统一样,如果您声明了一个 integer 数据类型的列,您只能插入 integer 数据类型的值。然而,在 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”,则分配 TEXT 亲和性。例如,VARCHAR 类型将被分配 TEXT 亲和性。
  3. 如果未指定列类型或数据类型为 BLOB,则分配 BLOB 亲和性。
  4. 如果类型包含以下字符串之一:“DOUB”、“REAL”或“FLOAT”,则分配 REAL 亲和性。
  5. 任何其他数据类型都分配 NUMERIC 亲和性。

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

SQLite Affinity Type
SQLite 数据类型与亲和性之间的映射

SQLite 中存储数据类型的示例

使用 SQLite INTEGER 存储数字

包含“INT”一词的任何数据类型列将被分配 INTEGER 类型亲和性。它将存储在 INTEGER 存储类中。

以下所有数据类型都分配为 INTEGER 类型亲和性

  • INT、INTEGER、BIGINT。
  • INT2、INT4、INT8。
  • TINYINT、SMALLINT、MEDIUM INT。

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

使用 SQLite REAL 存储数字

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

  • REAL。
  • DOUBLE。
  • DOUBLE PRECISION。
  • FLOAT。

使用 SQLite BLOB 存储大型数据

在 SQLite 数据库中存储大型文件的唯一方法是使用 BLOB 数据类型。此数据类型用于存储大型文件,如图像、文件(任何类型)等。文件将被转换为字节数组,然后以与输入文件相同的大小进行存储。

存储 SQLite 布尔值

SQLite 没有单独的 BOOLEAN 存储类。但是,BOOLEAN 值存储为 INTEGER,值为 0(假)或 1(真)。

存储 SQLite 日期和时间

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

  • DATE
  • DATETIME
  • TIMESTAMP
  • TIME

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

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

摘要

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