# Geburtstag in DB eintragen Date oder timestamp?



## DeeJay-Luke (6. September 2006)

Moin,

was ist empfehlenswerter wenn ich ein Geburtstag in die Datenbank eintragen will, soll ich mit dem MySQL Typ DATE und dann "0000-00-00" eintragen, oder das Geburtsdatum in den timestamp umwandeln? Oder besser gefragt: welches ist besser berücksichtung der Schaltjahre, soll am Ende eine Suchfunktion u.a. geben "von alter bis alter"


----------



## Gumbo (6. September 2006)

Falls du mit „timestamp“ einen Unix-Zeitstempel meinst, ist dieser für eine Zeitspanne – in diesem Fall ein ganzer Tag – absolut nicht geeignet. Denn Unix-Zeitstempel beschreiben immer genau nur einen Zeitpunkt.

Ob du nun aber den DATE- oder TIMESTAMP-Datentyp wählst, ist wohl eher Geschmackssache.


----------



## Dr Dau (7. September 2006)

Hallo!


			
				Gumbo hat gesagt.:
			
		

> Ob du nun aber den DATE- oder TIMESTAMP-Datentyp wählst, ist wohl eher Geschmackssache.


Dürfte eher eine Frage des Alters der User sein, als eine Frage des Geschmacks.
Schliesslich soll es auch User geben die vor 1970 geboren sind. 


			
				mysql.com hat gesagt.:
			
		

> Beachten Sie, dass DATETIME-, DATE- und TIMESTAMP-Werte zwar alle in denselben Formatvarianten angegeben werden können, aber die Typen nicht dieselben Wertebereiche aufweisen. So kann ein TIMESTAMP-Wert nicht vor 1970 und nicht nach 2037 liegen. Das bedeutet, dass ein Datum wie '1968-01-01' zwar als DATETIME- und DATE-Wert zulässig, als TIMESTAMP-Wert jedoch illegal ist und deswegen zu 0 konvertiert wird.


Quelle: MySQL.com, Die DATETIME-, DATE- und TIMESTAMP-Typen

Weiterhin sei noch anzumerken dass unter Windows ein negativer UNIX-Timestamp nicht von PHP unterstützt wird.


			
				php.net hat gesagt.:
			
		

> *Windows: *Negative Timestampwerte werden von keiner uns bekannten Windowsversion unterstützt. Aus diesem Grund ist der Gültigkeitsbereich für Jahresangaben auf Werte zwischen 1970 und 2038 eingeschränkt.


Quelle: PHP.net, mktime()

Mit anderen Worten: egal ob er nun den TIMESTAMP-Datentyp oder den UNIX-Timestamp meint, sind beide für Geburtstage nur bedingt zu gebrauchen.

Den DATETIME-Datentyp halte ich für übertreiben, da wahrscheinlich eh kaum jemand seine Geburtszeit mit angeben würde (sofern diese überhaupt bekannt ist).
Von daher würde ich also den DATE-Datentyp wählen.

Gruss Dr Dau


----------



## DeeJay-Luke (8. September 2006)

Hi Dr. Dau,

Hab jetzt die DATE (0000-00-00) Variante genommen, jetzt habe ich das Problem das ist das nicht so wirklich hinbekomme, dass mir meine Abfrage alle Spieler unter 23 Jahren anzeigt.

Habe volgenden Code benutzt: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL

```
"`geburtsdatum` BETWEEN (CURDATE() - INTERVAL 23 YEAR + INTERVAL 1 DAY)";
```


----------



## DeeJay-Luke (9. September 2006)

keine eine antwort?


----------

