MySQL FROM_UNIXTIME()返回sakila.actor的last_update列为null

时间:2018-10-04 00:52:52

标签: mysql timezone

salika示例模式中的actor表将last_update列定义为时间戳。我想使用JSON_ARRAY以ISO8601格式呈现该列。 -首先不应该将其作为JSON_ARRAY的默认呈现。

通过阅读该网站以及其他网站上的文档和评论,看来答案是将FROM_UNXTIME与生成ISO8601格式的输出掩码一起使用。

不幸的是,FROM_UNIXTIME()似乎总是在我的数据库上返回NULL

mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2018-10-03 17:15:03 |
+---------------------+
1 row in set (0.00 sec)

mysql> select from_unixTime(current_timestamp())
-> ;
+------------------------------------+
| from_unixTime(current_timestamp()) |
+------------------------------------+
| NULL                               |
+------------------------------------+
1 row in set (0.00 sec)

mysql>

我怀疑这可能是由于我没有安装时区配置文件引起的。但是当我尝试时,我得到了...

mysql -u root -p****** sys  <timezone_posix.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1146 (42S02) at line 1: Table 'sys.time_zone' doesn't exist

我肯定在这里错过了明显的事情。...

2 个答案:

答案 0 :(得分:0)

这最终对我有用...

select json_array("actor_id","first_name","last_name",DATE_FORMAT(convert_tz("last_update", @@session.time_zone, '+00:00'),'%Y-%m-%dT%T%fZ')) "json" from "sakila"."actor"

/

给出

 [
            1,
            "PENELOPE",
            "GUINESS",
            "2006-02-15T12:34:33000000Z"
        ],
        [
            2,
            "NICK",
            "WAHLBERG",
            "2006-02-15T12:34:33000000Z"
        ]

答案 1 :(得分:0)

只需尝试一下:

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(CURRENT_TIMESTAMP()));

正如mysql doc所说,函数FROM_UNIXTIME(unix_timestamp[,format])仅接受参数为UNIX_TIMESTAMP,而不接受TIMESTAMP

幸运的是,有一个函数UNIX_TIMESTAMP(date)可以将DATETIMESTAMP等各种类型转换为UNIX_TIMESTAMP。因此,首先调用UNIX_TIMESTAMP(date),然后调用`FROM_UNIXTIME(