我正在测试是否可以将字符串传递到我的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
更多,它会限制字符数量吗?
所有这些都经过测试:
sqlite3
答案 0 :(得分:0)
SQLite使用dynamic typing;无论你使用的是DATETIME还是CHAR¹或FLUFFY BUNNIES都没关系。
如果要强制某个值在supported formats中的任何一个中,您可以添加一个显式约束来检查某些built-in date function是否能够解析它:
userId
¹而CHAR(x)不限制长度。