通过php将TimeStamp插入MySql数据库

时间:2015-04-28 15:12:23

标签: php mysql

这个问题可能很愚蠢,但我对推荐的方式非常好奇。我正在为我的iOS应用程序制作demo rest api。我是iOS程序员,开始学习php编写我自己的快速演示API。

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

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

  

2015-04-15 16:48:25

和unix时间戳就像

  

1430233486

我的API从我的iOS应用程序接收unix时间戳。现在我的问题是,我必须将我的应用程序发送的时间戳转换为mysql保存的格式吗?我需要以单一格式保存数据。还有一个信息:有时如果app没有发送时间戳,那么mysql会插入当前时间戳本身,而当前时间戳的格式为 2015-04-15 16:48:25

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

注意:我的假设是mysql中的TIMESTAMP类型意味着unix TIMESTAMP。在mysql中也有DATETIME类型。我可能错了我的假设,因为我可以简单地使用INT类型来存储我的unix时间戳,但我喜欢mysql的特性,如果我没有提供来自应用程序的任何时间戳,那么在没有业务逻辑代码的情况下将当前时间戳插入默认值。

2 个答案:

答案 0 :(得分:1)

我建议您不要将2种不同类型的数据用于同一列数据库,这与数据不一致。

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

例如:

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

或者从date转换为unix时间戳:

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

   return $value;
}

并将该功能用于任何地方。

答案 1 :(得分:1)

据我所知,mysql中的unix时间戳没有专用字段的类型。 Unix时间戳实际上是带符号的32位整数,因此您可以使用 types | # objects | total size ====================================== | =========== | ============ list | 1095 | 160.78 KB str | 1093 | 66.33 KB int | 120 | 2.81 KB dict | 3 | 840 B frame (codename: create_summary) | 1 | 560 B frame (codename: print_diff) | 1 | 480 B 类型来存储它们。

请注意INT类型字段(https://msdn.microsoft.com/en-us/library/ms187745.aspx)的范围。我相信INT会对你有用,但是如果你处理的是非实际数字,你可能需要使用INT

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