我为什么要在SQL中使用datetime?

时间:2016-07-31 06:27:48

标签: sqlite validation datetime

我正在测试是否可以将字符串传递到我的sqlite数据库中,如下表所示:

CREATE TABLE TIMES(
    ID              INT             PRIMARY KEY                 ,
    TIME_START      DATETIME        DEFAULT CURRENT_TIMESTAMP   ,
    TIME_STOP       DATETIME                                    ,
    CONSTRAINT FUTURE_DATE CHECK
        (TIME_START >= CURRENT_TIMESTAMP AND TIME_STOP >= CURRENT_TIMESTAMP)
);

如此:

INSERT INTO TIMES VALUES (1, "2016-07-31 07:08:00", NULL)

它通过,没问题。我有点惊呆了,所以我尝试了另一个值:

INSERT INTO TIMES VALUES (2, "9999999999 07:08:00", NULL)

它也通过了。这让我很担心,因为它应该只允许DATETIME值,而不是一堆数字。我尝试了其他一些值:

INSERT INTO TIMES VALUES (3, "9999999999:::::::::", NULL);
INSERT INTO TIMES VALUES (4, "9999999999 99:99:99", NULL);
INSERT INTO TIMES VALUES (6, "this is some really random text", NULL);
INSERT INTO TIMES VALUES (6, "9999999999999999999", NULL);

除了最后一个以外的所有工作。我的问题是,为什么在没有验证进入的数据类型时使用日期时间?不能只使用CHAR(事实上,CHAR的约束比DATETIME更多,它会限制字符数量吗?

所有这些都经过测试:

1 个答案:

答案 0 :(得分:0)

SQLite使用dynamic typing;无论你使用的是DATETIME还是CHAR¹或FLUFFY BUNNIES都没关系。

如果要强制某个值在supported formats中的任何一个中,您可以添加一个显式约束来检查某些built-in date function是否能够解析它:

userId

¹而CHAR(x)限制长度。

相关问题