关于php:批量转换和更新datetime列值到UNIX时间戳?

Bulk convert and update datetime column values to UNIX timestamp?

背景

我有一个MySQL数据库,有大约1600万条记录。有两列created_at和updated_at目前采用datetime格式。

问题

我想通过转换所有值并用新值更新记录,将其更改为UNIX Timestamp。

我知道如何在循环中使用PHP,但是有没有一种方法可以通过在MySQL中执行单个查询来执行此更新?


因为这是一次性的改变;您可以这样进行:

  • 创建具有INT数据类型的新列,并命名它们,例如,created和updated。

    1
    2
    3
    ALTER TABLE `nameOfTable`
        ADD COLUMN `created` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `created_at`,
        ADD COLUMN `updated` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `updated_at`;
  • 更新表:

    1
    2
    3
    UPDATE `nameOfTable`
    SET `created` = UNIX_TIMESTAMP( `created_at` ),
        `updated` = UNIX_TIMESTAMP( `updated_at` );

    号

  • 删除旧列,将新列重新命名为created_at和updated_at。
  • 替代方式:

  • 将DATETIME列设置为VARCHAR字段。
  • 使用查询更新:

    1
    2
    3
    UPDATE `nameOfTable`
    SET `created_at` = UNIX_TIMESTAMP( `created_at` ),
        `updated_at` = UNIX_TIMESTAMP( `updated_at` );
  • 将列更改为INT。

  • HJPotter92的回答帮助很大。

    但在我的例子中,它并没有立即解决这个问题,因为我存储的日期的格式不被unix时间戳接受为参数。

    所以我必须先把它转换成一种可接受的格式。经过一些研究,我得出了以下问题:

    1
    UPDATE tableName set newFieldName = UNIX_TIMESTAMP(STR_TO_DATE(CAST(priorFieldName AS CHAR), '%m/%d/%y'));

    。