我是SQl新手,试图通过phpmyadmin进行转储。
目前日期数据存储在我的DB中为int(11)。
当我从phpmyadmin导出时,数据自然导出为'1325336400'等数字,但我希望这显示为01/01/2012或类似的格式。我有什么办法可以做到吗?
提前致谢
汁液
如果您将"日期数据"(如您所示)存储在32位整数中,我猜您正在使用*nix时间戳值(自1970年1月1日00:00 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