Kündigungsstatus: NULL | <timestamp>
Peter Thomassen
- datenbank
Hallo Forum!
Ich benötige eine Tabelle zur Abbildung von Verträgen, die (vereinfacht) folgendermaßen aufgebaut ist:
contracts:
id timestamp canceled
1 20021017175849 NULL
2 20011117175849 20021117175849
Vertrag 1 läuft also seit dem 17.10.2002 bis jetzt, Vertrag 2 wurde am 17.11.2001 geschlossen und ein Jahr später am 17.11.2002 wieder gekündigt.
Welchen Typ muss nun canceled haben? TIMESTAMP geht nicht, weil TIMESTAMP nicht den Wert NULL (für "nicht gekündigt") haben kann (dann würde das aktuelle Datum gesetzt).
BIGINT wäre wohl überdimensioniert, außerdem müsste ich dann für das aktuelle Datum NOW() mit angeben.
Welchen Typ würdet ihr setzen?
Danke!
Peter
Hi,
Welchen Typ muss nun canceled haben? TIMESTAMP geht nicht, weil TIMESTAMP nicht den Wert NULL (für "nicht gekündigt") haben kann (dann würde das aktuelle Datum gesetzt).
*jeder* Typus hat eine zusätzliche Eigenschaft, über die definiert wird, ob NULL erlaubt ist oder nicht.
Welchen Typ würdet ihr setzen?
Ich frage mich, wieso es mehr als einen Datumstyp geben muss. Was ist das für ein komisches DBMS? MySQL?
Cheatah
Hallo Cheatah!
Welchen Typ muss nun canceled haben? TIMESTAMP geht nicht, weil TIMESTAMP nicht den Wert NULL (für "nicht gekündigt") haben kann (dann würde das aktuelle Datum gesetzt).
*jeder* Typus hat eine zusätzliche Eigenschaft, über die definiert wird, ob NULL erlaubt ist oder nicht.
TIMESTAMP zumindest in dem von mir verwendeten DBMS nicht.
Welchen Typ würdet ihr setzen?
Ich frage mich, wieso es mehr als einen Datumstyp geben muss. Was ist das für ein komisches DBMS? MySQL?
Die "Vielfalt" an Datumstypen ist mir auch nicht ganz einleuchtend. MySQL4, ja.
Bye,
Peter
hi,
*jeder* Typus hat eine zusätzliche Eigenschaft, über die definiert wird, ob NULL erlaubt ist oder nicht.
TIMESTAMP zumindest in dem von mir verwendeten DBMS nicht.
du sagst, deine datenbank wäre MySQL 4.
woraus schliesst du, dass man dort eine spalte vom typ TIMESTAMP _nicht_ mit NULL oder NOT NULL definieren könnte?
gruss,
wahsaga
Hallo wahsaga,
*jeder* Typus hat eine zusätzliche Eigenschaft, über die definiert wird, ob NULL erlaubt ist oder nicht.
TIMESTAMP zumindest in dem von mir verwendeten DBMS nicht.
du sagst, deine datenbank wäre MySQL 4.
woraus schliesst du, dass man dort eine spalte vom typ TIMESTAMP _nicht_ mit NULL oder NOT NULL definieren könnte?
Daraus, dass MySQL mir für TIMESTAMP immer NULL erlaubt. Und wenn ich NULL als Wert einsetze, wird das Feld auf die aktuelle Zeit gesetzt (http://www.mysql.com/doc/en/DATETIME.html).
Bye,
Peter
hi,
Daraus, dass MySQL mir für TIMESTAMP immer NULL erlaubt.
daraus, dass mysql es _erlaubt_, schliesst du, dass es _nicht_ geht?
(zitat:
*jeder* Typus hat eine zusätzliche Eigenschaft, über die definiert wird, ob NULL erlaubt ist oder nicht.
TIMESTAMP zumindest in dem von mir verwendeten DBMS nicht.
)
Und wenn ich NULL als Wert einsetze, wird das Feld auf die aktuelle Zeit gesetzt
(http://www.mysql.com/doc/en/DATETIME.html).
das bestreitet ja keiner.
deine aussage las sich jedenfalls für mich so:
"mysql erlaubt es nicht, eine spalte vom typ TIMESTAMP mit NULL zu definieren."
gruss,
wahsaga
Hallo wahsaga,
deine aussage las sich jedenfalls für mich so:
"mysql erlaubt es nicht, eine spalte vom typ TIMESTAMP mit NULL zu definieren."
Es war gemeint, dass ihre Felder nicht den Wert NULL haben können.
Bye,
Peter
Moin!
Welchen Typ muss nun canceled haben? TIMESTAMP geht nicht, weil TIMESTAMP nicht den Wert NULL (für "nicht gekündigt") haben kann (dann würde das aktuelle Datum gesetzt).
Was hälst du von DATETIME? Wobei ich mich frage, warum du eine Uhrzeit brauchst.
TIMESTAMP ist von daher sehr gefährlich, weil es sich automatisch mit aktualisiert, wenn im Datensatz Änderungen gemacht werden und a) für die Timestamp-Spalte kein Wert oder b) NULL definiert wird. (Die automatische Aktualisierung gilt nur für die erste Timestamp-Spalte.)
- Sven Rautenberg
Hallo Sven!
Welchen Typ muss nun canceled haben? TIMESTAMP geht nicht, weil TIMESTAMP nicht den Wert NULL (für "nicht gekündigt") haben kann (dann würde das aktuelle Datum gesetzt).
Was hälst du von DATETIME? Wobei ich mich frage, warum du eine Uhrzeit brauchst.
DATE[TIME] ist die Lösung. Mit der Uhrzeit hast Du auch Recht :-) Dachte nur einfach an Timestamp, der ja per definitionem die Uhrzeit enthält.
TIMESTAMP ist von daher sehr gefährlich, weil es sich automatisch mit aktualisiert, wenn im Datensatz Änderungen gemacht werden und a) für die Timestamp-Spalte kein Wert oder b) NULL definiert wird. (Die automatische Aktualisierung gilt nur für die erste Timestamp-Spalte.)
Richtig. :-)
Danke!
Peter