Ich habe ein Feld in einer MySQL-Tabelle, das einen timestamp
Datentyp hat. Ich speichere Daten in dieser Tabelle. Wenn ich jedoch den Zeitstempel ( 1299762201428
) an den Datensatz übergebe, wird der Wert automatisch 0000-00-00 00:00:00
in dieser Tabelle gespeichert.
Wie kann ich den Zeitstempel in einer MySQL-Tabelle speichern?
Hier ist meine INSERT
Aussage:
INSERT INTO table_name (id,d_id,l_id,connection,s_time,upload_items_count,download_items_count,t_time,status)
VALUES (1,5,9,'2',1299762201428,5,10,20,'1'),
(2,5,9,'2',1299762201428,5,10,20,'1')
php
mysql
database
sql-insert
Gautamlakum
quelle
quelle
Antworten:
pass so
quelle
datetime
timestamp
varchar(15)
strtotime
. edit: Übrigens, der Zeitstempel deckt nur einen Bereich aller möglichen Daten ab (1970-01-01 bis xx-xx-2032, glaube ich)Hey, benutze die
FROM_UNIXTIME()
Funktion dafür.So was:
quelle
date('Y-m-d H:i:s','1299762201428')
?FROM_UNIXTIME
Gibt einen nativen MySQL-Datumstyp aus, während PHPsdate()
einen String zurückgeben.quelle
Einige Dinge zu klären:
daher wäre die richtige Antwort
quelle
Der Datentyp ' bigint unsigned ' kann dieser Anforderung entsprechen.
quelle
Ich vermute, dass das Feld, in dem Sie den Wert speichern möchten, ein Datum / Uhrzeit-Feld ist, das es nicht ist, aber das gleiche scheint für Zeitstempel zu gelten . Wenn ja, erwartet MySQL, dass das Format Jahr-Monat-Tag Stunde: Minute: Sekunde ist. Um den Zeitstempel zu speichern, müssen Sie das Feld mit einer Abfrage wie in numerisch konvertieren
Wenn Sie die aktuelle Uhrzeit verwenden, können Sie now () oder current_timestamp verwenden.
quelle
Sie können
now()
auch in Ihrer Abfrage verwenden, dh:Es wird der aktuelle Zeitstempel verwendet.
quelle
Verwenden
FROM_UNIXTIME()
.Hinweis: 1299762201428 ähnelt eher einem Millisekunden-Zeitstempel (wie Date () * 1 in JavaScript), und Sie müssen diesen wahrscheinlich durch 1000 teilen.
quelle
Überprüfen Sie den Feldtyp in der Tabelle und speichern Sie den Zeitstempelwert im Datentyp wie
bigint
usw.Nicht
datetime
tippenquelle
Dies sollte es tun:
quelle
Wenn der Zeitstempel die aktuelle Zeit ist, können Sie die MySQL-
NOW()
Funktion verwendenquelle
Feldtyp
datetime
verwenden. Es bietet viele Vorteile wie die Lesbarkeit durch den Menschen (niemand liest Zeitstempel) und MySQL-Funktionen .Um von einem Unix-Zeitstempel zu konvertieren, können Sie die MySQL-Funktion verwenden
FROM_UNIXTIME(1299762201428)
. Zum Zurückkonvertieren können Sie verwendenUNIX_TIMESTAMP
:SELECT UNIX_TIMESTAMP(t_time) FROM table_name
.Wenn Sie die MySQL-Funktion nicht mögen, können Sie natürlich immer PHP verwenden :
'INSERT INTO table_name SET t_time = ' . date('Y-m-d H:i:s', $unix_timestamp)
.quelle
timestamp
Feldtyp ist auch für Menschen lesbar (bei VerwendungSELECT
in der Konsole). Sie sind sehr unterschiedlich und beide haben ihre Nachteile. Der Hauptunterschied besteht darin, wie Zeitzonen behandelt werden.datetime
aus verschiedenen Gründen. Was ist Ihrer Meinung nach der größte Nachteil?timestamp
: Es passt besser zu den PHP-Zeitstempeln, da es gegen die Zeitzoneneinstellungen sowohl des Servers als auch des Clients immun ist, währenddatetime
sich der angezeigte Wert abhängig von der Zeitzone Ihres MySQL-Clients ändert (natürlich hängt es von Ihrem Projekt ab, welches man ist besser). größter Nachteil fürtimestamp
: Es werden keine NULL-Werte unterstützt und (ich weiß nicht, was sie geraucht haben, als sie dies programmiert haben) einTIMESTAMP NOT NULL
Feld wird zu einemTIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
. In meinem Fall habe ich leider müssen verwendenTIMESTAMP
für TZ Gründen.Besser ist der Datentyp
varchar(15)
.quelle
Sie können tun :
$date = \gmdate(\DATE_ISO8601);
.quelle
Wenn ich weiß, dass die Datenbank MySQL ist, verwende ich die NOW () - Funktion wie folgt:
quelle