Skip to main content

解释了SQLite数据类型及其重要概念

SQLite数据类型简介

如果您来自其他数据库系统,比如sqlite和PostgreSQL,您会注意到它们使用静态类型。这意味着,当您使用特定数据类型声明列时,该列只能存储所声明数据类型的数据。

与其他数据库系统不同,SQLite使用动态类型系统。换句话说,存储在列中的值决定其数据类型,而不是列的数据类型。

此外,在创建表时,不必为列声明特定的数据类型。如果您使用整型数据类型声明一个列,那么您可以存储任何类型的数据类型,比如text和BLOB,SQLite不会对此抱怨。

SQLite提供了五种基本数据类型,它们被称为存储类。

存储类描述SQLite用于在磁盘上存储数据的格式。存储类比数据类型更通用,例如,整数存储类包括6种不同类型的整数。在大多数情况下,可以互换使用存储类和数据类型。

下表说明了SQLite中的5个存储类:

SQLite根据以下规则根据值的数据类型确定其数据类型:

SQLite不支持内置的日期和时间存储类。但是,可以使用文本、INT或REAL来存储日期和时间值。有关如何处理日期和时间值的详细信息,请查看SQLite日期和时间教程。

SQLites提供了typeof()函数,允许您根据值的格式检查其存储类。请参见以下示例:

SELECT
typeof(100),
typeof(10.0),
typeof('100'),
typeof(x'1000'),
typeof(NULL);

SQLite Data Types - typeof function

SQLite中的一列可以存储混合数据类型。请参见下面的示例。

首先,为测试创建一个名为test_datatypes的新表。

CREATE TABLE test_datatypes (
id INTEGER PRIMARY KEY,
val
);

其次,将数据插入test_datatypes表。

INSERT INTO test_datatypes (val)
VALUES
(1),
(2),
(10.1),
(20.5),
('A'),
('B'),
(NULL),
(x'0010'),
(x'0011');

第三,使用typeof()函数获取存储在val列中的每个值的数据类型。

SELECT
id,
val,
typeof(val)
FROM
test_datatypes;

SQLite Data Types - mixed data types in a column

您可能会问,SQLite如何使用不同的存储类(如上面的val列)对列中的数据进行排序。

为了解决这个问题,SQLite在排序时提供了以下一组规则:

使用ORDER BY子句对具有不同存储类的列中的数据进行排序时,SQLite将执行以下步骤:

下面的语句对test_datatypes表的val列中的混合数据进行排序:

SELECT
id,
val,
typeof(val)
FROM
test_datatypes
ORDER BY val;

SQLite Data Types and ORDER BY clause

SQLite清单类型和类型关联

与SQLite数据类型相关的其他重要概念包括清单类型和类型关联:

在本教程中,您了解了SQLite数据类型和一些重要概念,包括存储类、清单类型和类型关联。