作者JoeHorn (每天都在公司玩OLG)
看板PHP
標題[討論] PHP 在 MySQL 用 UNIXTIMESTAMP 與 DATETIME
時間Tue Sep 28 23:19:39 2010
換個標題好了,原標題: [請益] 04跟4會不會有差?
私認為這算是不錯,而且值得討論的議題。
(如果板主覺得這篇放這個板不妥的話,麻請來信警告一下,我會揮刀自 D...)
因為個人習慣的關係,我近來很喜歡在 MySQL 放 DATETIME。
我寫過這幾篇跟 MySQL 的時間欄位有關的文章:
* 在 MySQL 中處理時間資料
http://www.joehorn.idv.tw/archives/2008/01/13/268/
* 用 MySQL 處理時間資料所應該注意的事
http://www.joehorn.idv.tw/archives/2008/03/19/282/
* [MySQL] 處理 weekday 欄位
http://www.joehorn.idv.tw/archives/2010/04/01/791/
以下沒有批評的意思,純粹是作看法與觀點的交換。
1F:→ knives:unix timestamp +1,之後想再改輸出格式或運算比較都很方便09/26 11:35
針對這個,其實 MySQL 有 UNIX_TIMESTAMP() 這個 function 可以轉換。
可能有人覺得「放 DATETIME 就必須轉換;放 UNIXTIMESTAMP 不必轉」。
但... 人類進行資料查詢時,直接看 DATETIME,一目了然;
程式需要 UNIXTIMESTAMP,再進行轉換,讓程式用就好了,是吧?
2F:→ Kelunyang:而且我最近發現time stamp可以跨越時區,不知道有沒有09/26 13:41
3F:→ Kelunyang:哪位有跨國主機可以幫忙測試一下09/26 13:41
放 DATETIME 的另外一個好處是可以在 INSERT 與 UPDATE 時直接用 NOW(),
時間值的時區則是以 MySQL server 的設定為準。
跨國執行的程式取出 MySQL server 的時間跟自己的主機作比對之後,
也可以知道時區差異。
4F:→ Kelunyang:存成unix time只要int 4byte而以ㄟXD09/26 23:00
5F:→ KC73:一個 datetime 19 個 bytes,大概 6 到 10 個中文字。09/27 02:53
以前大家很重視這個,因為記憶體跟磁碟空間的單位成本很高;現在...?
要計較 UNIXTIMESTAMP 跟 DATETIME 的容量差異的話,
一堆 BIGINT、VARCHAR(255)、TEXT 好像應該先被拖出來鞭一頓? XD
話說,我也看到很少有人把 AUTO_INCREMENT 欄位放 UNSIGNED 啊。
--
╓╥╥╖╓─╥╖ ╓─╥╖ ╓ ╓╖ ╓─╥╖ ╓─╥╖ ╓╖╓╖
╟╢ ║ ╟╢ ║ ╙╜ ║ ╟╢ ║ ╟╢ ║ ╟╢ ║║╟╢
╟╢ ║ ╟╢ ╟─ ╟─╫╢ ║ ╟╢ ╟─╫╜ ║║╟╢
╟╢ ║ ╟╢ ║ ╓╖ ║ ╟╢ ║ ╟╢ ║ ║ ║║╟╢
╙╨╜ ╙─╨╜ ╙─╨╜ ╙ ╙╜ ╙─╨╜ ╙ ╙╜ ╙╙╨╜
獅子男
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.37.139.80
6F:→ JoeHorn:也許 DATETIME 有我沒看到的缺點,麻煩諸位大德給予指教。 09/28 23:26
※ 編輯: JoeHorn 來自: 114.37.139.80 (09/28 23:27)
7F:推 alpe:postgresql用久了,回來看mysql他的時間處理真的太基本了 09/28 23:29
8F:→ JoeHorn:基本的意思是? 比上不足、比下有餘啊..(看看 Oracle) 09/28 23:45
9F:推 shadowjohn:既然討論 datetime 了~可以再補充一個 date_format 09/29 06:16
10F:→ shadowjohn:像K大用int存,其實也不錯~他指出容量的差別~ 09/29 06:17
11F:→ shadowjohn:select date_format(FROM_UNIXTIME(`foo`),'%Y%m%d') 09/29 06:18
12F:→ shadowjohn:不過我個人也是比較習實用datetime就是了~ 09/29 06:19
13F:推 appleboy46:phpBB 儲存的方式就是以 int 方式去存 09/29 10:30
14F:→ Kelunyang:用int存實作compare的時候搜尋速度應該也比string這些 09/30 12:52
15F:→ Kelunyang:快吧@@? 09/30 12:53
16F:→ Kelunyang:喔對我是真的有設定過時區,結果發現PHP的TIME()拿到的 09/30 12:53
17F:→ Kelunyang:都是同一個值,轉換之後也正常 09/30 12:53
18F:→ Kelunyang:不過我那時候只是好玩試試看,所以也不是很確定對不對@@ 09/30 12:54