2016-07-31 19 views
0

ich testen, ob ich Strings in meine SQLite-Datenbank in der folgenden Tabelle passieren könnte:Warum sollte ich Datetime in SQL verwenden?

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) 
); 

Wie so:

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

Es ging durch, kein Problem. Ich war etwas betäubt, um dies zu sehen, also versuchte ich einen anderen Wert:

Und es ging auch durch. Das hat mich beunruhigt, da es nur Werte in, nicht ein paar Zahlen erlaubt. Ich habe einige andere Werte ausprobiert:

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); 

Alle außer dem letzten funktionierten. Meine Frage ist, warum Datum Datum verwenden, wenn es die Art der eingehenden Daten nicht validiert? Kann nicht einfach CHAR verwenden (in der Tat hat CHAR mehr Einschränkungen als , begrenzt es die Anzahl der Zeichen)?

Alle diese getestet auf:

Antwort

0

SQLite verwendet dynamic typing; Es spielt keine Rolle, ob Sie DATETIME oder CHAR¹ oder FLUFFY BUNNIES verwenden.

Wenn Sie, dass ein Wert erzwingen wollen, ist in einem der supported formats, könnten Sie eine explizite Einschränkung hinzufügen, um zu überprüfen, dass einige built-in date function der Lage ist, es zu analysieren:

CREATE TABLE Times(
    Time_Stop DATETIME CHECK (date(Time_Stop) IS NOT NULL), 
    [...] 
); 

¹ und Saibling (x) tut nicht begrenzen Sie die Länge.

+0

Warum sollte ich dann irgendwas tippen? Hat das einen Vorteil? (Außer zu wissen, welche Typen wo sein sollten) –

+0

Für die Kompatibilität mit anderen SQL DBs. –

Verwandte Themen