SQLite 数据类型:整数 (int)、文本 (text)、数值 (Numeric)、实数 (Real)、二进制大对象 (Blob)。

⚡ 智能摘要

SQLite 与其他数据库相比,数据类型的工作方式有所不同,因为 SQLite 使用动态类型ping可以将任何值存储在任何列中。存储类、类型亲和性和声明的类型名称共同决定了每个值在磁盘上的物理保存方式。

  • 🧩 动态类型ping: SQLite 是动态类型的,因此,您插入的值(而不是列定义)决定数据的存储方式。
  • 🗄️ 存储类别: 五种存储类别——NULL、INTEGER、REAL、TEXT 和 BLOB——描述了每个值在磁盘上的保存方式。
  • 🎯 类型亲和力: 每一列都会根据其声明的类型名称获得一个推荐的关联类型——TEXT、NUMERIC、INTEGER、REAL 或 BLOB。
  • 🔢 数字存储: 任何包含 INT 的声明类型都会变为 INTEGER,而 REAL、DOUBLE 和 FLOAT 则用 8 个字节保存浮点数。
  • 📅 日期和布尔值: SQLite 没有专门的 DATE 或 BOOLEAN 类,而是将这些值存储为 TEXT、REAL 或 INTEGER。
  • 🤖 人工智能协助: AI文本转SQL助手和GitHub Copilot生成 SQLite 用通俗易懂的英语定义列和选择数据类型。

SQLite 数据类型

以下各节解释了如何 SQLite 本书处理数据类型,从五种存储类别开始,然后是类型亲和性及其赋值规则,最后是存储整数、实数、BLOB、布尔值和日期的示例。

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

SQLite 它是无类型的。没有固定的数据类型;你可以在任何列中存储任何类型的数据。这称为动态类型。ping.

在静态类型中,就像在其他数据库管理系统中一样,如果你声明了一个数据类型为整数的列,那么你只能插入数据类型为整数的值。然而,在动态类型中,就像在其他数据库管理系统中一样,如果你声明了一个数据类型为整数的列,那么你只能插入数据类型为整数的值。 SQLite列的类型由插入的值决定,然后 SQLite 根据其类型存储该值。

SQLite 储存类别

In SQLite 根据值的类型,有不同的存储方法;这些不同的存储方法被称为存储类。 SQLite.

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

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

SQLite 亲和类型

类型亲和性是指推荐存储在列中的数据类型。当然,您仍然可以根据需要存储任何类型的数据;这些类型只是推荐的,并非必需。

这些类型被引入于 SQLite 最大限度地提高之间的兼容性 SQLite 和别的 数据库管理系统s.

在 SQLite 数据库会根据其声明的数据类型被分配一个类型关联性。以下是类型关联性的列表。 SQLite:

  • 文本。
  • 数字。
  • 整数。
  • 真实的。
  • 斑点。

这是怎么回事 SQLite 根据列声明的数据类型确定列的关联性:

  • 如果声明的类型包含 绳子 “INT”。
  • 如果列的数据类型包含以下字符串之一:“TEXT”、“CHAR”或“CLOB”,则分配 TEXT 亲和性。例如,VARCHAR 类型将被分配 TEXT 亲和性。
  • 如果列没有指定类型或数据类型是 BLOB,则会分配 BLOB 亲和性。
  • 如果类型包含以下字符串之一:“DOUB”、“REAL”或“FLOAT”,则分配 REAL 亲和性。
  • NUMERIC 亲和性被分配给任何其他数据类型。

下方还有一个表格,展示了一些地图示例。ping 之间 SQLite 数据类型及其亲和性由以下规则决定:

地图ping 之间 SQLite 已声明的数据类型及其指定的类型关联性,例如 INT、CHAR、TEXT、BLOB、REAL、FLOAT 和 NUMERIC 的示例

存储数据类型的示例 SQLite

使用以下方式存储数字 SQLite INTEGER

如果任何列的数据类型包含“INT”字样,则该列将被赋予INTEGER类型关联性,并存储在INTEGER存储类中。

以下所有数据类型都被赋予了 INTEGER 类型关联性:

  • INT,整数,BIGINT。
  • INT2、INT4、INT8。
  • TINYINT、SMALLINT、MEDIUMINT。

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

使用以下方式存储数字 SQLite REAL

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

  • 真实的。
  • 双倍的。
  • 双精度。
  • 漂浮。

使用 SQLite BLOB

存储大型文件只有一种方法 SQLite 数据库使用的是 BLOB 数据类型。这种数据类型用于存储大型文件,例如图像或任何类型的文件。文件会被转换为字节数组,然后以与输入文件相同的大小存储。

储存 SQLite 布尔

SQLite 没有单独的 BOOLEAN 存储类。相反,BOOLEAN 值以整数形式存储,其中 0 表示假,1 表示真。

储存 SQLite 日期和时间

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

  • 日期
  • 日期时间
  • TIMESTAMP
  • 时间

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

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

常见问题

存储类是如何 SQLite 物理上存储一个值:NULL、INTEGER、REAL、TEXT 或 BLOB,具体类型在运行时根据每个值确定。类型亲和性是指列倾向于使用的类,该类根据其声明的类型名称选择。 SQLite 尝试申请。

序号 SQLite 忽略括号中的数字,因此 VARCHAR(50) 和 VARCHAR 的行为完全相同。两者都具有 TEXT 亲和性,因为类型名称包含 CHAR,并且 SQLite 除了全局 SQLITE_MAX_LENGTH 值之外,不施加任何长度限制。

在查询中使用 typeof() 函数,例如 SELECT typeof(column) FROM table。它返回值的实际存储类——null、integer、real、text 或 blob——由于动态类型,这可能与列声明的类型不同。ping.

严格表,已添加 SQLite 3.37,关闭类型关联性,拒绝任何与列声明类型不匹配的值。仅允许 INT、INTEGER、REAL、TEXT、BLOB 和 ANY 类型,从而实现严格的类型限制。ping 在其他数据库中找到。

将金额以整数形式存储,单位最好是分,以避免 REAL 浮点数值的舍入误差。对于可变精度或极高精度的情况,TEXT 格式可以保留精确的数字字符串。 SQLite 没有专门的固定点货币类型。

SQLITE_MAX_LENGTH 设置用于限制 TEXT 或 BLOB 值的大小,默认值为 10 亿字节。当前实现支持最​​大 2,147,483,647 字节。如有需要,您可以使用 sqlite3_limit() 接口在运行时降低此限制。

是的。AI文本转SQL助手可以将纯英文描述转换为CREATE TABLE语句,并选择 SQLite 存储类别和关联类型,例如 INTEGER、TEXT 和 REAL。提供现有列类型可以提高准确性,生成的 SQL 语句在运行前应进行检查。

是的。 GitHub 副驾驶 建议使用以下列定义 SQLite 在编辑器中,可以内联输入 INTEGER、TEXT、REAL 和 BLOB 等类型。 VS Code它会读取周围的模式和迁移代码,因此它的补全功能会重用你真实的表名和列名。

总结一下这篇文章: