【问题标题】:SQLite DateTime columns accepting any value... normal?SQLite DateTime 列接受任何值...正常吗?
【发布时间】:2012-11-08 04:11:06
【问题描述】:

我有一个使用 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

为什么会这样?

【问题讨论】:

    标签: ios sql database sqlite


    【解决方案1】:

    根据文档:SQLite- Data Types

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

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

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

    【讨论】:

    • @rmaddy 是的,我正在更新,但人工检查介于两者之间。
    【解决方案2】:

    SQLite 是动态的。来自SQLite Query Language - CREATE TABLE

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

    【讨论】:

      猜你喜欢
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      • 2014-07-01
      • 2015-01-13
      • 2017-04-18
      相关资源
      最近更新 更多