【问题标题】:MYSQL: Convert Timestamp --> TimeMYSQL:转换时间戳->时间
【发布时间】:2011-07-07 09:09:31
【问题描述】:

我有这个 MYSQL 表:

[ID] [TIMESTAMP] [TIME]
[1] [2010-05-29 01:17:35] []
[1] [2010-05-29 01:23:42] []

...等等

现在我需要将 TIMESTAMP 值复制到 TIME 行中。新的 TIME 行是通过 PHP 命令 time() 创建的;

问题:我不知道该怎么做。也许是一个 MySQL 命令,也许是通过 PHP?请帮帮我!

我的桌子:

CREATE TABLE `comments` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `ip` int(10) unsigned NOT NULL,
  `name` varchar(40) NOT NULL,
  `comment` text NOT NULL,
  `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `email` varchar(30) NOT NULL,
  `time` int(100) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `news_id` (`m0arid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=17198 ;

目标:我想删除时间戳。在我看来,时间更好。

PS:如果你对我有一个一般性的提示,看看这张表,请告诉我:)。

【问题讨论】:

  • 我会保留时间戳。
  • 为什么你的时间列的类型是 int(100) ?你想用什么格式?
  • @Krtek Unix 时间戳。 @Tomalak Geret'kal 遗憾的是我不能:/.
  • int(100) - (100) 部分只是一个显示提示 - “显示 100 位数字”。它与数字的存储方式无关。在内部一个 int 是一个 int 并且占用 4 个字节的存储空间,无论你想要 1 位还是 100。
  • @user606346 就像我在回答中所说的那样,mysql 时间戳实际上是 unix 时间戳,您想要进行的转换没有意义。在内部,它将完全相同相同,但没有类型检查 mysql 可以使用时间戳类型。

标签: php mysql time timestamp


【解决方案1】:

【讨论】:

  • 这种转换完全没有意义,MySQL内部将时间戳类型存储为unix时间戳。如果您的时间列将用于存储 unix 时间戳,您可以坚持使用它完全相同的时间戳。文档中的以下引用“当在 TIMESTAMP 列上使用 UNIX_TIMESTAMP() 时,该函数直接返回内部时间戳值,没有隐式的“字符串到 Unix 时间戳”转换。”支持我的主张;)
【解决方案2】:

您可以使用这些函数在日期和 Unix 时间戳之间来回切换(不要与 MySQL 的 TIMESTAMP 列类型混淆):

关于您的表格,我认为将日期存储为整数几乎没有什么用处。如果不进行事先转换,您将无法进行任何日期计算(甚至显示为日期)。此外,PHP 中的 Unix 时间戳不是非常可移植的:一些平台甚至不允许存储 1970 年之前的日期...

【讨论】:

  • MySQL 的 TIMESTAMP 类型实际上是内部的 Unix 时间戳,就像我的回答中解释的那样,对此没有混淆;)但我同意保留时间戳列
【解决方案3】:

如果您打算按照类型 (int(100)) 的建议将日期的 unix 时间戳存储在时间列中,这完全没有意义。

在内部,Timestamp 列被 MySQL 存储为 Unix 时间戳。以下引用(来自http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_unix-timestamp):

在 TIMESTAMP 列上使用 UNIX_TIMESTAMP() 时,该函数直接返回内部时间戳值,没有隐式的“字符串到 Unix 时间戳”转换。

证明了我的观点。

执行查询时看到的结果只是 MySQL 试图漂亮地打印信息。

我建议保留时间戳列并在您确实需要该值作为时间戳时在查询中使用UNIX_TIMESTAMP(timestamp)

【讨论】:

  • 呃,一切都变了。我很抱歉
【解决方案4】:

我建议使用 PHP date() 函数而不是 time()。将 MySQL 数据库中的“时间”属性更改为 datetime 的数据类型。在您需要记录时间的 php 中,使用:

date("Y-m-d H:i:s");

这将生成一个完全符合 MySQL 日期时间数据类型格式的字符串。

(例如“2011-03-02 08:04:32”)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 2023-03-24
    • 2015-11-22
    • 1970-01-01
    • 2013-09-27
    • 2012-01-18
    相关资源
    最近更新 更多