【问题标题】:Inserting TimeStamp into MySql Database via php通过php将时间戳插入MySql数据库
【发布时间】:2015-04-28 15:12:22
【问题描述】:

这个问题可能很愚蠢,但我真的很好奇推荐的方法是什么。我正在为我的 iOS 应用程序制作演示休息 api。我是一名 iOS 程序员,正在学习 php 以编写我自己的快速演示 api。

在我的一张桌子上,我有 TIMESTAMP 类型的列。我正在向我的 api 发送 unix 时间戳值,它将将该值插入该列。

我检查了数据库,默认时间戳值格式存储为

2015-04-15 16:48:25

和unix时间戳是一样的

1430233486

我的 API 从我的 iOS 应用程序接收到 unix 时间戳。现在我的问题是我是否必须将我的应用程序发送的这个时间戳转换为 mysql 保存的格式?我需要以单一格式保存数据。更多信息:有时如果应用程序未发送时间戳,则 mysql 会自行插入当前时间戳,并且此当前时间戳再次采用 2015-04-15 16:48:25 格式。

我的偏好是以传统的 unix 时间戳格式保存。如果 mysql 决定将当前时间戳存储在列中,是否有任何设置/查询,而不是始终以 1430233486 格式存储?

注意:我的假设是 mysql 中的 TIMESTAMP 类型表示 unix TIMESTAMP。 mysql中也有DATETIME类型。我的假设可能有误,因为我可以简单地使用 INT 类型来存储我的 unix 时间戳,但是如果我不从应用程序提供任何时间戳,我喜欢 mysql 插入当前时间戳作为默认值而无需业务逻辑代码的功能。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    据我所知,mysql 中没有用于 unix 时间戳的专用字段类型。 Unix 时间戳实际上是有符号的 32 位整数,因此您可以使用 INT 类型来存储它们。

    请注意 INT 类型字段 (https://msdn.microsoft.com/en-us/library/ms187745.aspx) 的范围。我相信 INT 会为您工作,但如果您处理的是超出范围的数字,您可能需要使用 BIGINT

    在我看来,您应该存储 unix 时间戳而不是格式化的日期/时间选项,因为它易于操作、计算或重新格式化。

    【讨论】:

    • 正要提出这个建议。如果您的 API 以 INT 形式从您的 iOS 应用程序接收时间戳,不妨以相同的方式将其存储在数据库中。
    【解决方案2】:

    我建议你不要将2种不同类型的数据放入数据库的同一列,数据不一致。

    我建议你做一个函数或方法来比较值是字符串还是数字,然后将其转换为日期时间或时间戳。

    例如:

    function convertTime($value) {
       if (is_numeric($value)) {
           return date("Y-m-d H:i:s", $value);
       }       
       return $value;
    }
    

    或者从日期转换为unix时间戳:

    function convertTime($value) {
       if (is_string($value)) {
           return strtotime($value);
       }
    
       return $value;
    }
    

    并在任何地方使用该功能。

    【讨论】:

      猜你喜欢
      • 2011-03-26
      • 2016-03-06
      • 1970-01-01
      • 2015-09-14
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多