15 Stimmen

UNIX-Zeitstempel zu MySQL DATETIME

Ich habe eine Tabelle mit Statistiken und einem Feld namens time mit Unix-Zeitstempeln.

Es gibt etwa 200 Zeilen in der Tabelle, aber ich möchte die Unix-Zeitstempel in MySQL DATETIME ändern, ohne die aktuellen Zeilen zu verlieren. Die aktuelle Tabelle:

CREATE TABLE `stats` (
    `id` int(11) unsigned NOT NULL auto_increment,
    `time` int(11) NOT NULL,
    `domain` varchar(40) NOT NULL,
    `ip` varchar(20) NOT NULL,
    `user_agent` varchar(255) NOT NULL,
    `domain_id` int(11) NOT NULL,
    PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Also die time (INT) sollte ein DATETIME-Feld sein.

Wie kann ich den Unix-Zeitstempel in MySQLs DATETIME aktualisieren?

30voto

Lepidosteus Punkte 11338

Denken Sie daran, es zu testen, bevor Sie es in der Praxis einsetzen. Das hier ist aus dem Gedächtnis geschrieben, sollte Ihnen aber eine gute Vorstellung vermitteln.

ALTER TABLE `stats` CHANGE `time` `unix_time` int(11) NOT NULL // rename the old column
ALTER TABLE `stats` ADD `time` DATETIME NOT NULL // create the datetime column
UPDATE `stats` SET `time`=FROM_UNIXTIME(unix_time) // convert the data
ALTER TABLE `stats` DROP `unix_time` // drop the old unix time column

3voto

zvrba Punkte 23708
  1. Verwenden Sie alter table, um eine neue Spalte (z. B. time2) mit dem Typ datetime in derselben Tabelle zu erstellen.
  2. update stats set time2=from_unixtime(time);
  3. Verwenden Sie alter table, um a) die Spalte time zu löschen und b) die Spalte time2 in time umzubenennen.

0voto

Mohamed Ziada Punkte 21
ALTER TABLE `stats`
MODIFY COLUMN `time` timestamp NULL DEFAULT '0000-00-00 00:00:00' AFTER `id`;
ALTER TABLE `stats`
MODIFY COLUMN `time` datetime NULL DEFAULT '0000-00-00 00:00:00' AFTER `id`;

0voto

Bad Loser Punkte 2775

Hier ist ein PDO-Beispiel für die Verwendung von FROM_UNIXTIME in einer vorbereiteten Erklärung:

$query = "INSERT INTO " .$this->table_name.  " SET origTS=FROM_UNIXTIME(:d2)";                
$stmt = $this->conn->prepare($query);
$stmt->bindParam(":d2", $this->origTS);         // UNIX time [ but seconds! ]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X