2011-03-02 138 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」)。