UNIX时间戳到MySQL日期时间

UNIX时间戳到MySQL日期时间,mysql,datetime,timestamp,Mysql,Datetime,Timestamp,我有一个带有统计信息的表和一个名为time的字段,该字段带有Unix时间戳 表中大约有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)

我有一个带有统计信息的表和一个名为
time
的字段,该字段带有Unix时间戳

表中大约有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

  • 使用ALTERTABLE在同一个表中创建datetime类型的新列(例如time2)
  • 更新统计设置时间2=从_unixtime(时间)
  • 使用alter table a)删除时间列,b)将time2重命名为time

  • 记住在真正使用它之前测试它,这是从记忆中写出来的,但应该会给你一个好主意

    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
    

    下面是一个PDO示例,说明如何在准备好的语句中使用来自\u UNIXTIME的

    $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! ] 
    

    非常好,最后一个应该是altertable
    stats
    。谢谢干得好!工作得很好!您可以在中看到如何在datetime中转换时间戳
    $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! ]