SQLite 数据类型
SQLite 数据类型是一种定义任何对象的数据类型的质量。 SQLite 不同于其他数据库系统,它使用动态类型系统。换句话说,存储在任何列中的值定义了它的数据类型,而不是列的数据类型。
存储类可用于定义 SQLite 用于在磁盘上存储数据的格式。 SQLite 提供了五种主要数据类型,如下所述 -
- NULL –这是一个 NULL 值。
- INTEGER –它是一个整数,根据值存储在 1、2、3、4、6 或 8 个字节中。
- REAL –它是一个浮点值,存储为 8 字节浮点数。
- TEXT –它是一个字符串,使用数据库编码 (UTF) 存储。
- BLOB –这是一组数据,完全按照输入的方式存储。
SQLite 在列上支持类型关联概念。任何列所考虑的存储类称为其亲和性。 SQLite 数据库中每个表的列都被分配了以下类型关联之一 -
- TEXT – 此列捕获 NULL、TEXT 或 BLOB 的所有数据。
- NUMERIC – 此列捕获所有存储类别的值。
- INTEGER – 它在 CAST 表达式中存在异常,其行为方式与具有 NUMERIC 关联的列类似。
- REAL – 它强制整数值转换为浮点表示。并且表现得像一个具有 NUMERIC 亲和性的列。
- NONE – 具有 NONE 亲缘关系的列不会选择一个存储类高于另一个存储类,并且不会将数据从一个存储类更改为另一个。
注意: SQLite 没有任何不同的存储类来存储日期和/或时间。另一方面,TEXT、INT 或 REAL 可用于存储日期和时间值。亲和力测定:
显示的顺序中的以下规则用于声明列的种类和任何列的亲和性 –
- 如果声明的列类型具有字符串“INT”,则分配给它整数关联。
- 如果声明的列类型具有任何字符串,如“TEXT”、“VARCHAR”或“CLOB”,则该列具有 TEXT 亲和性。
- 如果声明的列类型具有字符串“BLOB”,或者如果没有给出种类,则该列具有 BLOB 亲和性。
- 如果声明的列类型具有像“FLOA”或“DOUB”这样的字符串,则该列具有 REAL 关联。
- 否则,亲和力为 NUMERIC。
下表显示了 SQLite 可以接受的一小部分数据类型的亲和性确定的 5 条规则将 SQL 中的常见数据类型转换为亲和性 –
SQLite data type | Type affinity |
---|---|
INT INTEGER TINYINT SMALLINT MEDIUMINT BIGINT UNSIGNED BIG INT INT2 INT8 | INTEGER |
NUMERIC DECIMAL(10, 5) BOOLEAN DATE DATETIME | NUMERIC |
REAL DOUBLE DOUBLE PRECISION FLOAT | REAL |
CHARACTER(20) VARCHAR(255) VARYING CHARACTER(255) NCHAR(55) NATIVE CHARACTER(70) NVARCHAR(100) TEXT CLOB | TEXT |
BLOB no datatype specified | NONE |
SQLite 提供了 typeof()函数,该函数可用于根据值的格式检查值的存储类别。
示例-1:
SELECT typeof(200), typeof(20.0),
typeof('200'), typeof(x'2000'), typeof(NULL);
typeof(200) | typeof(20.0) | typeof(‘200’) | typeof(x’2000′) | typeof(NULL) |
---|---|---|---|---|
integer | real | text | blob | null |
在 SQLite 中,创建表时不需要为列声明特定的数据类型。示例 2 :
让我们创建一个名为 geek_test 的新表并插入值 -
CREATE TABLE geek_test (Item);
INSERT INTO geek_test (Item)
VALUES (1), (2), (10.1), (20.5), ('A'), ('B'),
(NULL), (x'0010'), (x'0011');
使用 typeof()函数检查存储在 Item 列中的每个值的数据类型。
SELECT Item, typeof(Item)
FROM geek_test;
Item | typeof(Item) |
---|---|
(1) | integer |
(2) | integer |
(10.1) | real |
(20.5) | real |
(‘A’) | text |
(‘B’) | text |
(NULL) | null |
(x’0010′) | blob |
(x’0011′) | blob |