2015-10-29 144 views
2

我有一個在phpMyAdmin中創建的表,它包含兩個字段:start_time和text_modified。它看起來像這樣爲什麼我不能在mysql/phpmyadmin中存儲時間戳?

http://i.imgur.com/fHcWyOh.png

所以START_TIME可能爲空。 當我在phpMyAdmin填充數據我可以選擇應表示爲這個時間戳的日期和時間:

http://i.imgur.com/XvpjuPS.png

這樣做我期望存儲在該領域的時間戳值,而不是日期的後時間。但是,當我做一個查詢SELECT start_time from table我看到有這樣的:

http://i.imgur.com/Nwam2e1.png

所以我認爲它僅僅是PHP我的管理,可以自動顯示我的所有日​​期的日期時間值,而不是時間戳。但現在,當我做一個查詢:SELECT FROM_UNIXTIME(start_time) FROM table我得到的結果:

http://i.imgur.com/gOZdoU3.png

,而是我在這裏想正常的日期。這裏出了什麼問題?

+0

嘗試'CAST(start_time AS UNSIGNED INTEGER)' –

回答

2

在時間戳中,您可以插入日期時間值,內部存儲爲整數(自1970-01-01以來可能知道的秒數)。當您選擇它們​​時,它們顯示爲日期和時間。

到目前爲止這麼好。

當您有像0000-00-00 00:00:00這樣的值時,您可能插入了NULL值或無效日期或日期超出整數值的範圍。使用FROM_UNIXTIME()在這裏沒有意義,因爲此函數從整數值計算日期和時間值。時間戳列的這個整數值就像我說過的只在內部使用。因此,您得到NULL有效日期的值和1970-01-01的無效日期,因爲這些大概被視爲00秒,因爲1970-01-01 00:00:00是驚喜1970-01-01 00:00:00

+0

謝謝。那麼在數據庫中存儲時間戳的最安全方法是什麼?我應該把它改成int嗎?如果是這樣,那麼使用時間戳字段有什麼好處呢? – user3766930

+0

你是什麼意思的「最安全的方式」。你遇到什麼問題會讓事情變得不安全?時間戳超過日期時間的好處是例如數據存儲要求越少(4字節對8字節)。關於不同數據類型之間的所有差異,我推薦查看[manual](http://dev.mysql.com/doc/refman/5.0/en/date-and-time-types.html)。 – fancyPants

相關問題