TDengine插入合法时间戳报Timestamp data out of range错误如何解决
报错根因
TDengine 全局限定了时间戳的写入有效范围,和数据库配置的时间精度无关,有效区间为 UTC 时间 1970-01-01 00:00:01 ~ 2106-02-07 06:28:15,转换为东八区(UTC+8)时间就是 1970-01-01 08:00:01 ~ 2106-02-07 14:28:15。
你尝试写入的1970-01-01 08:00:00(对应Unix时间戳0)刚好比允许的最小写入时间早1秒,因此触发时间戳越界报错。
解决方案
如果是测试场景,直接调整写入时间到最小有效值以上即可正常写入:
-- 时间字符串写法 insert into test values('1970-01-01 08:00:01',1,'one'); -- 时间戳写法,毫秒精度下对应值为1000,秒精度下对应值为1 insert into test values(1000,1,'one');
如果业务确实需要写入Unix纪元起始点附近的时间,可以在业务层做统一偏移处理:写入时给所有时间戳加固定偏移量(比如86400秒,即1天),查询读取时再减去对应偏移量还原即可。
内容的提问来源于stack exchange,提问作者Ray Shown
相关产品推荐
相关产品推荐

