2013-01-18 95 views
0

我有「2013-01-17 18:46:47 -0800」和「1358477089」格式的數據...我想知道什麼是最好的方式來存儲在一個mysql數據庫,它允許我選擇一定的月份,周,日等內的結果。使用mysql自己的函數。在MySQL中存儲時間

目前我的創建表代碼就像這樣..「時間戳」需要改變。

可見

CREATE TABLE IF NOT EXISTS `votes` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `from` varchar(32) NOT NULL, 
    `username` varchar(32) NOT NULL, 
    `address` varchar(16) NOT NULL, 
    `timestamp` varchar(32) NOT NULL, 
    PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1; 
+0

你一定要規範的是時間戳字段並將其轉換爲一個本地MySQL的日期時間類型。現在就這樣做,然後你的實際問題將基本消失。 –

+0

'timestamp' varchar(32)NOT NULL,...只是臨時的..所以我可以做的PHP代碼來實際插入所有的數據..我打算刪除表格,並重做一遍使用適當的格式化時間欄......只要圖中哪個時間的東西將被轉換成什麼。 – NestedCodeblocksFTW

回答

1

如果你使用時間戳,你的字段應該是一個「整數」而不是varchar。這提供了更好的性能(例如,如果您爲此列使用索引)。

如果你不需要1970年以前的日期,我會建議使用時間戳,而不是日期時間。它更容易使用。

PHP

$timestamp = date('U'); 

MySQL的

INSERT INTO table SET timestamp = UNIX_TIMESTAMP() 
5

最好的辦法是使用MySQL內置DATETIME類型。

MySQL提供了很多功能,可以讓您在某個月份,每週,每天,任何您需要的情況下選擇結果。

見的功能在這裏偉大的名單:

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

由於hek2mgl和其他球員提到的,也有TIMESTAMP

MySQL將TIMESTAMP值從當前時區轉換爲UTC存儲,並從UTC返回到當前時區以供檢索。 (對於DATETIME等其他類型不會發生此問題。)
如果您存儲TIMESTAMP值,然後更改時區並檢索該值,則檢索到的值與您存儲的值不同。

我提供並建議您使用DATETIME

+2

取決於你會做什麼,但當然是+1。時間戳類型也應該提到 – hek2mgl

+1

是的,'timestamp'佔用了一半的空間(4個字節對8個字節),因此值得考慮的是,如果你不需要存儲1970 - 2037年以外的值。 –