2009-08-15 15 views
15

Mam tabelę ze statystyką i polem o nazwie time z uniksowymi znacznikami czasowymi.UNIX Znacznik czasu do MySQL DATETIME

Istnieje około 200 wierszy w tabeli, ale chciałbym zmienić sygnatury czasowe Uniksa na DATETIME MySQL bez utraty bieżących wierszy. Obecna tabela:

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 

Więc time (INT) powinna być polem DATETIME.

Jak mogę zaktualizować uniksowy znacznik czasu do DATETIME MySQL?

+0

Można zobaczyć, jak przekonwertować datownika w datetime w [http://www.jordigirones.com/455-convertir-unix-timestamp-en-fecha-de-mysql.html](http : //www.jordigirones.com/455-convertir-unix-timestamp-en-fecha-de-mysql.html) –

Odpowiedz

30

Pamiętaj, aby przetestować go przed użyciem go na prawdę, jest to zapisane z pamięci, ale powinno dać ci dobry pomysł.

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 
+0

Działa świetnie, ostatni powinien być ALTER TABLE 'stats'. Dzięki! –

+0

Poprawiony, zadowolony z pomocy – Lepidosteus

+0

Świetna robota! Działa idealnie! – Abadis

3
  1. wykorzystanie zmiany tabeli tworzenia nowej kolumny (np TiMe2.), Z rodzaju datetime w tej samej tabeli
  2. aktualizacji statystyki
  3. zestaw Time2 = from_unixtime (czas);
  4. użyj tabeli zmian do a) usuń kolumnę czasu i b) zmień nazwę czasu2 na czas.
0
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`; 
Powiązane problemy