SQLite的数据类型
libai 发布于 2024-12-09
  • NULL. 值是一个NULL值.
  • INTEGER. 该值是一个带符号整数,根据值的大小存储在0、1、2、3、4、6或8个字节中。
  • REAL.该值是一个浮点数,存储为8字节的IEEE浮点数。
  • TEXT. 该值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE或UTF-16LE)存储。
  • BLOB.该值是一个数据块,与输入时完全相同。

存储类比数据类型更通用。例如,INTEGER存储类包括7种不同长度的整数数据类型。这在磁盘上产生了影响。但是,一旦INTEGER值从磁盘读取到内存中进行处理,它们就会被转换为最通用的数据类型(8字节有符号整数)。因此,在大多数情况下,“存储类”与“数据类型”无法区分,这两个术语可以互换使用。

SQLite版本3数据库中的任何列(INTEGER PRIMARY KEY列除外)都可以用于存储任何存储类的值。

SQL语句中的所有值,无论是嵌入在SQL语句文本中的文字还是绑定到预编译SQL语句的参数,都有一个隐式存储类。在下面描述的情况下,数据库引擎可以在查询执行期间在数值存储类(INTEGER和REAL)和TEXT之间转换值。

 

Boolean 数据类型

SQLite没有单独的布尔存储类。相反,布尔值存储为整数0(false)和1(true)。

SQLite从3.23.0版本(2018-04-02)开始识别关键字“TRUE”和“FALSE”,但这些关键字实际上只是整数文字1和0的替代拼写。

 

日期和时间数据类型

SQLite没有专门用于存储日期和/或时间的存储类。相反,SQLite的内置日期和时间函数能够将日期和时间存储为TEXT、REAL或INTEGER值:

文本为ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。

真正的Julian历日数,根据保守的格里高利历,自公元前4714年11月24日格林尼治中午以来的天数。

INTEGER表示Unix时间,自1970-01-01 00:00:00 UTC以来的秒数。

应用程序可以选择以这些格式中的任何一种存储日期和时间,并使用内置的日期和时间函数在格式之间自由转换。

使用刚性类型的SQL数据库引擎通常会尝试自动将值转换为适当的数据类型。考虑一下:

CREATE TABLE t1(a INT, b VARCHAR(10));

INSERT INTO t1(a,b) VALUES('123',456);

在执行插入操作之前,严格类型的数据库会将字符串“123”转换为整数123,将整数456转换为字符串“456”。

为了最大限度地提高SQLite和其他数据库引擎之间的兼容性,并使上面的示例在SQLite上像在其他SQL数据库引擎上一样工作,SQLite支持列上的“类型亲和性”概念。列的类型相关性是存储在该列中的数据的推荐类型。这里的重要思想是,该类型是推荐的,而不是必需的。任何列仍然可以存储任何类型的数据。只是有些列在有选择的情况下,会更喜欢使用一个存储类而不是另一个。列的首选存储类称为“亲和性”。

SQLite 3数据库中的每一列都被分配了以下类型亲和性之一:

  • TEXT
  • NUMERIC
  • INTEGER
  • REAL
  • BLOB

 

李白
关注 私信
文章
14
关注
0
粉丝
0