SQLite DateTime列接受任何值...正常吗?

时间:2012-11-08 04:11:06

标签: ios sql database sqlite

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

为什么这可能?

2 个答案:

答案 0 :(得分:6)

根据文档:SQLite- Data Types

  

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

     
      
  • TEXT as ISO8601 strings
  •   
  • 真实的朱利安日数,即公元前4714年11月24日格林威治中午以来的天数。根据预感格里高利历。
  •   
  • INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以来的秒数。
  •   

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

答案 1 :(得分:3)

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

  

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