📜  SQLite 数据类型

📅  最后修改于: 2022-05-13 01:55:11.032000             🧑  作者: Mango

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 可用于存储日期和时间值。亲和力测定:
显示的顺序中的以下规则用于声明列的种类和任何列的亲和性 –

  1. 如果声明的列类型具有字符串“INT”,则分配给它整数关联。
  2. 如果声明的列类型具有任何字符串,如“TEXT”、“VARCHAR”或“CLOB”,则该列具有 TEXT 亲和性。
  3. 如果声明的列类型具有字符串“BLOB”,或者如果没有给出种类,则该列具有 BLOB 亲和性。
  4. 如果声明的列类型具有像“FLOA”或“DOUB”这样的字符串,则该列具有 REAL 关联。
  5. 否则,亲和力为 NUMERIC。

下表显示了 SQLite 可以接受的一小部分数据类型的亲和性确定的 5 条规则将 SQL 中的常见数据类型转换为亲和性 –

SQLite data typeType 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)
integerrealtextblobnull

在 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;

Itemtypeof(Item)
(1)integer
(2)integer
(10.1)real
(20.5)real
(‘A’)text
(‘B’)text
(NULL)null
(x’0010′)blob
(x’0011′)blob