1

我有一个使用 SQLite 的 iOS 应用程序。我使用 FireFox 和插件 SQLite Manager 来管理数据库。

现在我有一个这样的表:

CREATE TABLE "someTable" ("id" INTEGER NOT NULL , "timeOfEvent" DATETIME NOT NULL)

但是,我几乎可以在 DateTime 列中输入我想要的任何值,如下所示:

INSERT INTO sometable (id, timeOfEvent) VALUES (1,'2012-99-99')
INSERT INTO sometable (id, timeOfEvent) VALUES (2,'yyyy-mm-dd')
...etc

为什么这可能?

4

2 回答 2

6

根据文档:SQLite-数据类型

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

  • TEXT 作为 ISO8601 字符串
  • REAL 作为儒略日数字,根据预测的公历,自公元前 4714 年 11 月 24 日格林威治中午以来的天数。
  • INTEGER 作为 Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。

因此 SQLite 依赖于方法来转换值。它没有自己的数据类型来限制日期/时间类型。

于 2012-11-08T04:15:14.793 回答
3

SQLite 是动态的。从SQLite 查询语言 - 创建表

与大多数 SQL 数据库不同,SQLite 不会根据声明的列类型来限制可以插入到列中的数据类型。相反,SQLite 使用动态类型。列的声明类型仅用于确定列的亲和性。

于 2012-11-08T04:14:53.983 回答