【问题标题】:MySQL FROM_UNIXTIME() returns null with last_update column of sakila.actorMySQL FROM_UNIXTIME() 使用 sakila.actor 的 last_update 列返回 null
【发布时间】:2019-03-09 07:15:14
【问题描述】:

salika 示例架构中的参与者表将 last_update 列定义为时间戳。我想使用 ISO8601 格式的 JSON_ARRAY 呈现该列。 - 首先不应该是 JSON_ARRAY 的默认渲染。

从阅读本网站和其他网站上的文档和 cmets 看来,答案似乎是使用 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

当然我在这里遗漏了一些明显的东西......

【问题讨论】:

  • 好的,我修复了加载时区配置信息的问题,这个操作的目标数据库是'mysql',而不是'sys'。操作成功完成,但在停止重新启动服务后,我仍然遇到 from_unixtime() 返回 null 的问题..
  • 好的,现在我让自己感到困惑... FROM_UNIXTIME(unix_timestamp()) 返回预期结果。但是 unix_timestamp() 自己会重新调整一个纪元值,这是有道理的,因为 FROM_UNIX 时间似乎需要一个纪元。如果我有时间戳类型的列,例如前面提到的 last_update 列,它似乎不能与 FROM_UNIXTIME 一起使用,

标签: mysql timezone


【解决方案1】:

试试这个:

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(

【讨论】:

    【解决方案2】:

    这最终对我有用......

    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"
            ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-08
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 2012-04-04
      相关资源
      最近更新 更多