2009-08-15 146 views
15

我有统计数据的表格和一个名为time使用Unix时间戳字段。UNIX时间戳到MySQL DATETIME

有表中的约200行,但我想改变的Unix时间戳到MySQL DATETIME不失当前行。目前表:

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 

所以time(INT)应该是一个DATETIME场。

如何更新Unix时间戳到MySQL的DATETIME?

+0

你可以看到如何时间戳转换的日期时间在[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) – 2012-07-06 09:08:04

回答

30

记得在真实使用它之前测试它,这是从内存写入,但应该给你一个好主意。

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

伟大的作品,最后一个应该是ALTER TABLE'stats'。谢谢! – 2009-08-15 13:31:23

+0

更正,很乐意帮助 – Lepidosteus 2009-08-15 13:33:27

+0

伟大的工作!完美工作! – Abadis 2017-11-16 12:24:03

3
  1. 使用alter table来与同一表
  2. 更新统计设置TIME2 = FROM_UNIXTIME(时间)的日期时间类型创建一个新的列(例如,时间2);
  3. 使用alter table一个)删除时间列,以及b)在时间2重命名为时间。
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`;