我是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

10-04 21:44
查看更多