【问题标题】:UNIX Timestamp to MySQL DATETIMEUNIX 时间戳到 MySQL DATETIME
【发布时间】:2010-11-19 21:24:49
【问题描述】:

我有一个包含统计信息的表格和一个名为 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?

【问题讨论】:

标签: mysql datetime timestamp


【解决方案1】:
  1. 使用 alter table 在同一个表中创建一个 datetime 类型的新列(例如 time2)
  2. update stats set time2=from_unixtime(time);
  3. 使用 alter table a) 删除 time 列,b) 将 time2 重命名为 time。

【讨论】:

    【解决方案2】:

    记得在真正使用它之前对其进行测试,这是凭记忆写的,但应该会给你一个好主意。

    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
    

    【讨论】:

    • 效果很好,最后一个应该是 ALTER TABLE stats。谢谢!
    • 干得好!完美运行!
    【解决方案3】:
    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`;
    

    【讨论】:

      【解决方案4】:

      这是一个 PDO 示例,说明如何在准备好的语句中使用 FROM_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! ] 
      

      【讨论】:

        猜你喜欢
        • 2018-01-04
        • 1970-01-01
        • 2021-08-06
        • 1970-01-01
        • 1970-01-01
        • 2011-12-10
        • 2010-12-18
        • 1970-01-01
        相关资源
        最近更新 更多