2011-01-04 3 views
0

meine einfache Frage ist .. Ist es möglich, phptime() Wert standardmäßig in eine Spalte einer MySQL-Datenbank einfügen, so dass ich es jedes Mal nicht einfügen muss. Ich weiß, MYSQL CURR_TIMESTAMP bietet ..aber sie als ganze Zahl im Gegensatz zu der Zeitfunktion nicht gespeichert werden, die den Zeitstempel als integer gibt ..Ist es möglich, php time() -Wert standardmäßig in eine Spalte einer MYSQL-Datenbank einzufügen?

Jede Hilfe sehr geschätzt wird ... Danke

+2

Es ist wirklich eine schlechte Gewohnheit „Zeit“ als ganze Zahl zu speichern, wenn die Datenbank die ‚Zeit‘ Format unterstützt. Wenn Sie es später wirklich als Integer benötigen (und Sie sollten fragen, warum - vielleicht ist etwas anderes kaputt), können Sie es immer noch konvertieren. – Konerak

+0

Beziehen Sie sich tatsächlich auf die Zeit von dem Server, auf dem PHP läuft, im Gegensatz zur Uhrzeit des Datenbankservers? –

+0

ich habe den uniximimestamp und ich muss eine zwischenabfrage ausführen ... und wenn das gespeicherte format so ist, dann muss ich auf andere weise abfragen – saikat

Antwort

3

Beispiel:

drop table if exists file_events; 

create table file_events (
    id int unsigned auto_increment not null, 
    file_id int unsigned not null, 
    event_time int unsigned not null default UNIX_TIMESTAMP(), # the field that defaults to "now" 
    primary key(id), 
    constraint foreign key fk_file_events_to_sam_files (file_id) references files(id) on delete cascade 
) ENGINE=InnoDB; 
+0

'CURRENT_TIMESTAMP' und' NOW() 'sind genau die gleichen, so fügt dies nichts hinzu. –

+0

@Matthew: Sie waren richtig, ich habe meine Antwort bearbeitet, UNIX_TIMESTAMP() gibt zurück, was OP whanted. –

+1

Eine 'Zeitstempel'-Spalte ist nur ein anderer Typ von Datum, es ist keine Ganzzahl. Wenn Sie versuchen, das Ergebnis von 'UNIX_TIMESTAMP()' zu speichern (was * eine Ganzzahl ist), können Sie nur '0000-00-00 00: 00: 00' erhalten. –

1

Wenn Sie es auf eine MySQL-Grundlagen tun, will man immer Trigger [http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html] erstellen Sie einfach einen Trigger die Spalte Ihrer Wahl in den aktuellen Zeitstempel

+0

Dies ist die gültige Antwort auf die Frage. Natürlich ist es wahrscheinlich sinnvoller, ein korrektes Datum zu speichern und 'UNIX_TIMESTAMP()' zu verwenden, um die Konvertierung durchzuführen. –

0

einstellen können Sie sollten nur Stick mit dem MySQL-t Imestamp und konvertieren Sie es nach Bedarf. Es ist einfach zu tun ...

strtotime("put the mysql timestamp here"); 

wird das gleiche Format (Unix-Zeitstempel) als

time(); 
+0

na ja, das ist wahr ... ich habe den unixtimestamp und ich muss eine zwischen Abfrage ausführen ... und wenn das gespeicherte Format so ist, dann muss ich auf andere Weise abfragen ... – saikat

+1

Beachten Sie, dass PHP's Zeit und MySQL ' TIMESTAMP' * beide * repräsentieren Sekunden seit der UNIX-Epoche. Siehe MySQL [Übersicht] (http://dev.mysql.com/doc/refman/5.0/en/date-and-time-type-overview.html). –

0

Im Gegensatz zu vielen anderen DBMS erzeugen, wird MySQL unterstützt Funktionen nicht als Standardwert. Die einzige Ausnahme ist die, die Sie erwähnen: Daten akzeptieren CURRENT_TIMESTAMP (oder einen ihrer Werte). Es scheint mir, das ist eine ganz akzeptable Lösung sowieso, da Sie einfach Ihren on-the-fly-Unix-Zeitstempel umwandeln können:

SELECT foo_id, foo_info 
FROM foo 
WHERE FROM_UNIXTIME(1294133369)<=foo_date 

Oder von PHP:

$sql = "SELECT foo_id, foo_info 
    FROM foo 
    WHERE '" . date('Y-m-d H:i:s', 1294133369) . "')<=foo_date"; 

Wie auch immer, wenn Sie unbedingt brauchen, um speichern Sie Daten als Ganzzahlen, Sie müssen Ihre eigenen Trigger schreiben. Hier ist ein schönes Beispiel:

http://mysqldatabaseadministration.blogspot.com/2006/01/playing-with-triggers.html

Verwandte Themen