📜  SQLite 数据类型(1)

📅  最后修改于: 2023-12-03 15:05:19.974000             🧑  作者: Mango

SQLite 数据类型

SQLite 是一种轻量级的嵌入式关系型数据库管理系统,支持多种数据类型用于存储和处理数据。SQLite的数据类型是静态类型的,这意味着数据在插入表之前需要先声明类型,不支持动态类型。

在SQLite中,每个列都必须具有数据类型,以下是SQLite支持的数据类型及其说明:

1. NULL

NULL 数据类型表示列的值可为空值。它表示该列不包含任何可用的数据。

2. INTEGER

INTEGER 数据类型用于存储整数值,可以是 1, 100, -10 等。

SQLite使用变长整数编码来存储整数值,根据存储的数值范围,SQLite会自动选择1, 2, 3, 4, 6或8字节的存储空间。

3. REAL

REAL 数据类型用于存储浮点数值,表示带有小数部分的数字。SQLite使用8字节双精度浮点数来存储REAL类型的值。

例如,3.14, 2.71828 等都是REAL类型的值。

4. TEXT

TEXT 数据类型用于存储字符串值。SQLite中的文本类型是不区分大小写的,不会根据列的长度进行截断。

例如,'Hello', 'SQLite', '123' 等都是TEXT类型的值。

5. BLOB

BLOB 数据类型用于存储二进制数据。可以用于存储图像、音频、视频等类型的数据。

6. NUMERIC

NUMERIC 数据类型是SQLite内部使用的数据类型,用于存储任意精度的数值。在大多数情况下,使用其他类型(如INTEGER或REAL)更为常见。

数据类型的声明

在创建表时,可以通过在列的名称后面添加数据类型来声明该列的数据类型。以下是在SQLite中声明列数据类型的示例:

CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    name TEXT,
    age INTEGER,
    salary REAL
);

在上面的示例中,我们声明了一个名为users的表,其中包含了idnameagesalary四个列,分别具有INTEGERTEXTINTEGERREAL数据类型。

类型亲和性

SQLite还使用一种称为"类型亲和性"(Type Affinity)的特性,它是一种在进行比较和排序操作时自动进行的数据类型转换。

例如,如果将一个整数值插入到一个声明为TEXT类型的列中,SQLite会自动将其转换为字符串类型。

类型亲和性的规则如下:

  • NULL没有亲和性,与任何其他类型都不兼容。
  • INTEGER有较高的亲和性,如果存储的值是一个整数,它将按照整数进行处理,否则将转换为浮点数。
  • REAL的亲和性低于INTEGER,如果存储的值是一个浮点数,则按照浮点数进行处理,否则将转换为字符串。
  • TEXT的亲和性低于REAL,如果存储的值是一个数字,则按照浮点数进行处理,否则将按照字符串进行处理。
  • BLOB的亲和性最低,如果存储的值为一个有效的UTF-8或UTF-16字符串,则按照字符串处理,否则将按照大小写不敏感的比较进行处理。
总结

SQLite提供了多种数据类型用于存储和处理数据,包括NULL, INTEGER, REAL, TEXT, BLOB和NUMERIC。在创建表时,需要根据数据的特性选择适当的数据类型。同时,理解类型亲和性的规则有助于正确处理存储和比较操作。

详情请参考SQLite数据类型官方文档