作者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