Mysql 我应该为传感器数据使用时间戳还是日期时间

Mysql 我应该为传感器数据使用时间戳还是日期时间,mysql,datetime,Mysql,Datetime,我知道这是一个常见的问题,在这个论坛上已经得到了回答,但我的问题是针对某个场景的。 我将传感器数据存储在数据库表中 CREATE TABLE `sensordata` ( `userID` varchar(45) NOT NULL DEFAULT '', `instrumentID` varchar(10) NOT NULL DEFAULT '', `utcDateTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `lo

我知道这是一个常见的问题,在这个论坛上已经得到了回答,但我的问题是针对某个场景的。 我将传感器数据存储在数据库表中

CREATE TABLE `sensordata` (
  `userID` varchar(45) NOT NULL DEFAULT '',
  `instrumentID` varchar(10) NOT NULL DEFAULT '',
  `utcDateTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `localDateTime` datetime DEFAULT NULL,
  `data` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`userID`,`instrumentID`,`utcDateTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
localDateTime
列是多余的,所以我想去掉它,但我必须跟踪本地时间,因为我们允许用户更改传感器的时区,这就是为什么我保留记录数据的本地时间。我还想将
utcDateTime
的数据类型更改为
timestamp
,以便在SELECT查询中执行时间转换。比如说,

If a sensor is recording in Sydney, one day the user changes its timezone to UTC, how will I know which data is for what time (if I use the current timezone of the sensor).
我应该坚持这个模式,还是应该创建另一个表来跟踪时区的变化并根据它解析日期? 如果有更好的解决方案,请提供建议。
谢谢

我的两分钱是使用“服务器时间戳”和“本地时间戳”,这样你就可以看到哪个时间戳是哪个了。在它旁边,我将制作一个“事件日志”,以查看更改配置时的用户。

我将使用DATETIME存储传感器读取时的UTC+0时间以及localTimeOffset(以分钟为单位)。为什么?

没有简单的逻辑来解释如何抵消随时间的变化——随着时间的推移,不同国家的情况可能不同,DST变化的应用也不同。一些国家在其时区进行DST调整,一些国家(我认为澳大利亚就是其中之一)改变时区

拥有utcDatetime和localTimeOffset将允许您在任何情况下重现事件的准确时间,包括传感器时区的更改,并允许您将事件时间转换为用户的时区时间


旁注:您必须以分钟为单位存储localTimeOffset,因为有些国家的偏移量为UTC+05:45(尼泊尔)

Yeah,这就是我所想的,但我实际上是想缩小桌子的大小,因为桌子大到64米以上,所以要想找到更好的解决方案,你可以考虑把时间保持在-4B与8B.如果你有UTC保存,这对“本地时间”有什么不同?-您是指传感器的本地还是存储传感器的服务器的本地?我想你可以保留时区(不需要日期)。向用户显示数据将是UTC到他们选择的时区的转换。问题很清楚,我指的是传感器的本地时间。