SQLite真的支持DATE类型吗?

Ale*_*lex 3 sqlite sqlite-browser

阅读https://sqlite.org/datatype3.html后,其中指出

“SQLite 没有专门用于存储日期和/或时间的存储类。”

但能够运行这个

CREATE TABLE User (ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, BORN_ON DATE NULL)
Run Code Online (Sandbox Code Playgroud)

然后在“DB Browser for SQL”中看到它,如下所示:

在此输入图像描述

我开始怀疑 SQLite 是否确实支持 Date 类型,它只是“伪造”使用其他类型的支持。即使是这样,为什么数据库浏览器将其视为日期?数据库中存储有任何元信息吗?

for*_*pas 5

SQLite 不会DateNumerics 来伪造。

DateSQLite 中没有数据类型。

在SQLite Version 3 的数据类型中,清楚地解释了:

SQLite 使用更通用的动态类型系统

除了数据类型之外,还有 5 种存储类别NULLINTEGERREALTEXTBLOB

还:

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

因此,当您Date在语句中用作列的数据类型时CREATE TABLE,您不限于仅在其中存储类似日期的值。实际上您可以在该列中存储任何内容。

“DB Browser for SQLite”等工具可能会提供各种数据类型供您在创建表时选择来定义列。
您所做的数据类型的选择不是限制性的,而是表明您想要在列中存储什么类型的数据。

事实上,您甚至可以在不声明列的数据类型的情况下创建表:

CREATE TABLE tablename(col1, col2) 
Run Code Online (Sandbox Code Playgroud)

或使用虚构的数据类型:

CREATE TABLE tablename(col1 somedatatype, col2 otherdatatype)
Run Code Online (Sandbox Code Playgroud)

并插入任何数据类型的值:

INSERT INTO tablename(col1, col2) VALUES 
  (1, 'abc'),
  ('XYZ', '2021-01-06'),
  (null, 3.5)
Run Code Online (Sandbox Code Playgroud)