2011-03-02 103 views
4

我有这样的MySQL表:MYSQL:转换时间戳 - >时间

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

...等等

现在我需要的时间戳值复制到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:如果你对我有一个一般的暗示,看这张表,请告诉我:)。

+1

我会保持时间戳。 – 2011-03-02 15:36:03

+0

为什么你的时间列int(100)的类型?你想用什么格式? – krtek 2011-03-02 15:36:36

+0

@Krtek Unix时间戳。 @Tomalak Geret'kal可悲的是我不能:/。 – user606346 2011-03-02 15:44:24

回答

2

,您可以用这些功能日期和Unix时间戳(不使用MySQL的TIMESTAMP列类型混淆)之间来回切换:

至于你的表,那么,我看到st将日期定义为整数。您无法进行任何日期计算(甚至不显示日期),无需进行事先转换。此外,PHP中的Unix时间戳不是非常便携:一些平台甚至不允许在1970年之前存储日期...

+0

MySQL的TIMESTAMP类型实际上是Unix时间戳internaly,就像在我的回答中解释的那样,对此没有疑惑;)但我同意保留时间戳列 – krtek 2011-03-02 15:51:28

0
+1

这种转换毫无意义,MySQL将时间戳类型存储为一个unix时间戳internaly。如果您的时间列将用于存储unix时间戳,则您可以使用时间戳**它完全相同**。以下引用来自文档“当在TIMESTAMP列上使用UNIX_TIMESTAMP()时,该函数直接返回内部时间戳记值,并且没有隐式的”字符串到Unix时间戳记“转换。”备份我的声明;) – krtek 2011-03-02 15:40:53

2

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

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

当UNIX_TIMESTAMP()是在一个TIMESTAMP列中使用的,功能直接返回内部的时间戳值,没有隐含的“串到Unix时间戳”的转换。

证明了我的观点。

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

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

+0

呃它全部改变了。我很抱歉 – 2011-03-02 15:47:42

2

我会建议使用PHP date()函数而不是time()。将您的MySQL数据库中的'时间'属性更改为数据类型datetime。凡曾经在你的PHP,你需要记录时间,使用方法:

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

这将产生一个字符串,恰好适合了MySQL日期时间数据类型的格式。

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