【问题标题】:PHP: Safely converting the field date in mySQL from 'datetime' to 'unix timestamp' without losing dataPHP:安全地将 mySQL 中的字段日期从“datetime”转换为“unix timestamp”,而不会丢失数据
【发布时间】:2013-09-15 09:16:53
【问题描述】:

问题

我需要从实际的 datetime 格式字段 date 安全地转换 mySQL 数据库表 MYTABLE 中的日期格式:例如2013-09-10 12:43:03,到它的 unix 时间戳等效值:1378816983,而不会影响数据库中已有的数千篇文章。

我正在使用 PHP、mySql、Drupal。

我的方法

我的步骤

  1. 将表字段类型从日期时间更改为时间戳 [DONE]

  2. 转换实际内容类型字段:timestamp [DONE]

  3. 使用 PHP strtotime() 或 MYSQL 转换 4 个表中的现有文章数据字段:UNIX_TIMESTAMP(date)

我在 PT.3 上需要帮助

A.对pt的算法有一点帮助。 3:

例如

  loop over all 4 tables {

       - create a new column date2 of type: int (or datetime?) 
       - copy all dates from date to date2 passing them through strtotime()
       - delete column date
       - rename column date2 to column date

}

【问题讨论】:

  • 你为什么想要它?

标签: php mysql sql unix datetime


【解决方案1】:
  1. 备份表
  2. 检查备份是否正常且安全
  3. 将表字段类型从 datetime 更改为 varchar
  4. 更新表集字段=unix_timestamp(field)
  5. 将表字段类型从 varchar 更改为 int

但是我根本不会做这样的转换

【讨论】:

  • unix_timestamp 函数接受日期时间输入,因此无需将其转换为 varchar,因此跳过该步骤会更安全。如果出现问题,则不会更改任何数据。
  • @your-common-sense,我需要执行此更改以使文章索引能够正常工作而不会出现性能问题,因为任何基于此日期查找条目的数据库查询都无法被索引( datetime 必须在数据库层转换为时间戳)。
【解决方案2】:

首先,像这样转换数据最安全的方法是不要即时进行。

我要做的第一件事是在您的表格中添加另一列。然后鉴于我们没有修改现有数据,我会考虑使用the Unix_timestamp mysql 函数。如果您已经将数据存储在日期数据类型中,那么 mysql 这样做似乎既好又安全。

鉴于此,运行以下内容似乎很简单:

update MyTable set newtimeStampColumn=UNIX_TIMESTAMP(oldDateColumn);

看看它是如何工作的。然后,您可以运行一些比较查询以确保您的所有数据都已正确转换。

【讨论】:

  • 可以帮我把它变成 PDO 语言吗?
  • @Kandinski 这是我将从控制台而不是 PHP 脚本执行的操作。话虽如此,如果您无法访问控制台,alter table statement is still 非常简单。只需编写语句并执行它。话虽如此,备份表(至少通过 PHPMyAdmin)是一个好主意,以防你有点困惑:)
  • 这应该以编程方式运行,因为代码将在包含数千篇文章的多个网站上运行。我已经重新编辑了我的答案以澄清。
猜你喜欢
  • 2019-09-29
  • 1970-01-01
  • 2013-05-16
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多