我是SQl的新手,正尝试通过phpmyadmin进行转储。
目前,数据以int(11)的形式存储在我的数据库中。
当我从phpmyadmin导出时,数据自然会导出为“ 1325336400”之类的数字,但是我希望将其显示为01/01/2012或类似格式。有什么办法可以做到吗?
提前谢谢了
朱斯
最佳答案
如果您以32位整数存储“日期数据”(按您的说法),那么我猜您正在使用* nix时间戳值(自1970年1月1日UTC时间以来的秒数)。
(您知道这可能会在2038年的某个时候溢出,对吧?http://en.wikipedia.org/wiki/Year_2038_problem)
正如您所发现的那样,phpmyadmin在使用这些值时很难。
MySQL具有TIMESTAMP数据类型,该数据类型也使用* nix样式的时间戳。 (它不会溢出; MySQL开发人员做了正确的事。)
您确实确实需要将日期数据转换为TIMESTAMP数据类型。否则,时间的浪费将永远成为脖子上的巨大痛苦。这是操作方法。
首先,以这种方式向表中添加一列,
ALTER TABLE mytable ADD COLUMN ts TIMESTAMP AFTER myinttimestamp
然后使用已有的值填充新的
ts
列。UPDATE TABLE mytable SET ts = FROM_UNIXTIME(myinttimestamp)
接下来,更改新列的定义,以使其不允许NULL值,并使用当前时间作为默认值:
ALTER TABLE mytable
CHANGE ts
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
最后,如果您愿意,可以摆脱带有INT值的旧列。
ALTER TABLE mytable DROP COLUMN myinttimestamp
(您应该考虑在表的副本上尝试所有这些;这样做会发臭,导致错误并破坏您的数据)。
当使用
TIMESTAMP
数据类型时,MySQL会尽力在内部以UTC(时区不敏感)时间存储所有这些时间戳,并根据您的设置将它们转换为本地时间(显示时) SET time_zone = 'Asia/Vladivostok'
管他呢。当您将它们放入数据库时,它还会将它们从本地时间转换为UTC时间。
这是一篇文章。
https://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html