这个问题可能很愚蠢,但我对推荐的方式非常好奇。我正在为我的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的特性,如果我没有提供来自应用程序的任何时间戳,那么在没有业务逻辑代码的情况下将当前时间戳插入默认值。
答案 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时间戳而不是格式化的日期/时间选项,因为它易于操作,计算或重新格式化。