Mybatis 插入负数报错

【TDengine 使用环境】
生产环境 /测试/ Poc/预生产环境

测试环境

【TDengine 版本】

3.3.8.1

【操作系统以及版本】

centos7

【部署方式】容器/非容器部署

容器 单机

【集群节点数】

【集群副本数】

【描述业务影响】

有负数数据无法插入

【问题复现路径/shan】做过哪些操作出现的问题

使用的mybatis 然后出现time_offset 是一个负数数据导致数据无法插入表结构如下:

但是直接插入数据是可以的同时time_offset是一个负数也是可以的

【遇到的问题:问题现象及影响】

【资源配置】

【报错完整截图】(不要大段的粘贴报错代码,论坛直接看报错代码不直观)

into lute_iot_device.device_property_re9f7ze7hvyj2wpg ( `ts` , `time_offset` , `temperature` , `type` , `identifier` , `uid` ) using lute_iot_device.product_property_3yhuya tags ( ‘Re9f7zE7HVYj2WpG’ , ‘3YHuya’ ) values ( 1762511028175 , -28800000 , 27.52 , ‘property’ , ‘report’ , ‘1983790644816200225’ )

### Cause: java.sql.SQLException: TDengine ERROR (0x216): syntax error near '1762511028175

             , 

 ' (invalid timestamp)

; uncategorized SQLException; SQL state ; error code [534]; TDengine ERROR (0x216): syntax error near '1762511028175

         , 

 ' (invalid timestamp)

能否贴出来详细调用栈 taos 部分

完整异常日志如下:

org.springframework.jdbc.UncategorizedSQLException: ### Error updating database. Cause: java.sql.SQLException: TDengine ERROR (0x216): syntax error near '1762739266687 , ’ (invalid timestamp) ### The error may exist in file \[D:\programing\lute\lute\_aiot\_device\_service\lute-iot-device-server\target\classes\mapper\TdEngineMapper.xml] ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: insert into lute\_iot\_device.device\_property\_re9f7ze7hvyj2wpg ( `ts` , `time_offset` , `temperature` , `type` , `identifier` , `uid` ) using lute\_iot\_device.product\_property\_3yhuya tags ( ‘Re9f7zE7HVYj2WpG’ , ‘3YHuya’ ) values ( 1762739266687 , -28800000 , 27.47 , ‘property’ , ‘report’ , ‘1983790644816200225’ ) ### Cause: java.sql.SQLException: TDengine ERROR (0x216): syntax error near '1762739266687 , ’ (invalid timestamp) ; uncategorized SQLException; SQL state \; error code \[534]; TDengine ERROR (0x216): syntax error near '1762739266687 , ’ (invalid timestamp) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:94) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:347) at jdk.proxy2/jdk.proxy2.$Proxy157.insert(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:224) at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) at jdk.proxy2/jdk.proxy2.$Proxy185.insertTableData(Unknown Source) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at com.baomidou.dynamic.datasource.aop.DynamicDataSourceAnnotationInterceptor.invoke(DynamicDataSourceAnnotationInterceptor.java:57) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) at jdk.proxy2/jdk.proxy2.$Proxy186.insertTableData(Unknown Source) at com.lute.iot.device.common.domain.service.impl.ThingModelMessageTsDataImpl.addProperties(ThingModelMessageTsDataImpl.java:101) at com.lute.iot.device.common.consumer.MqttListener.deviceThingsConsumer(MqttListener.java:123) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169) at org.springframework.kafka.listener.adapter.KotlinAwareInvocableHandlerMethod.doInvoke(KotlinAwareInvocableHandlerMethod.java:45) at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119) at org.springframework.kafka.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:70) at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:419) at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.invoke(MessagingMessageListenerAdapter.java:383) at org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:85) at org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:50) at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeOnMessage(KafkaMessageListenerContainer.java:2799) at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeOnMessage(KafkaMessageListenerContainer.java:2777) at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.lambda$doInvokeRecordListener$53(KafkaMessageListenerContainer.java:2700) at io.micrometer.observation.Observation.observe(Observation.java:565) at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeRecordListener(KafkaMessageListenerContainer.java:2698) at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeWithRecords(KafkaMessageListenerContainer.java:2540) at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeRecordListener(KafkaMessageListenerContainer.java:2429) at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeListener(KafkaMessageListenerContainer.java:2084) at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeIfHaveRecords(KafkaMessageListenerContainer.java:1460) at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.pollAndInvoke(KafkaMessageListenerContainer.java:1425) at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run(KafkaMessageListenerContainer.java:1295) at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run$$$capture(CompletableFuture.java:1804) at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: java.sql.SQLException: TDengine ERROR (0x216): syntax error near '1762739266687 , ’ (invalid timestamp) at com.taosdata.jdbc.TSDBError.createSQLException(TSDBError.java:107) at com.taosdata.jdbc.ws.WSStatement.execute(WSStatement.java:94) at com.taosdata.jdbc.ws.WSStatement.executeQuery(WSStatement.java:45) at com.taosdata.jdbc.ws.WSStatement.executeQuery(WSStatement.java:38) at com.taosdata.jdbc.ws.AbsWSPreparedStatement.executeQuery(AbsWSPreparedStatement.java:106) at com.taosdata.jdbc.ws.AbsWSPreparedStatement.execute(AbsWSPreparedStatement.java:89) at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58) at jdk.proxy3/jdk.proxy3.$Proxy192.execute(Unknown Source) at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) at jdk.proxy2/jdk.proxy2.$Proxy190.update(Unknown Source) at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:61) at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) at jdk.proxy2/jdk.proxy2.$Proxy189.update(Unknown Source) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) at jdk.proxy2/jdk.proxy2.$Proxy189.update(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) … 41 common frames omitted

这个报错看起来是时间戳格式不对。你的数据库是 ms 时间戳吗?

ts是时间戳

不知道是不是这个time_offset影响的 它是负数就插入不了 正数是可以的 ,同时我在dbeaver执行上面的报错sql是可以执行的

SHOW create database xx 看下你的建库参数

CREATE DATABASE lute_iot_device BUFFER 16 CACHESIZE 1 CACHEMODEL ‘none’ COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 2 KEEP 60d,60d,60d PAGES 256 PAGESIZE 4 PRECISION ‘ms’ REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0 ENCRYPT_ALGORITHM ‘none’ SS_CHUNKPAGES 131072 SS_KEEPLOCAL 525600m SS_COMPACT 1 COMPACT_INTERVAL 0d COMPACT_TIME_RANGE 0d,0d COMPACT_TIME_OFFSET 0h

请问这个是什么原因导致的 或者我能临时的怎么改一下吗

现有的信息判断不出来问题出在哪里,需要看下taoslog,默认在/var/log/taos目录下,搜索关键字invalid timestamp

好的 我看看。

这个是错误日志

image

还有这个

方便加微信远程吗?这里沟通不太方便

微信号:p403795824

大佬 微信号是不是有错误 好像不存在该用户 :joy:

抱歉,写错了:p403795284

into lute_iot_device.device_property_sgeoag8row11uvrf

     (

        \`ts\`

     ,

        \`time_offset\`

     ,

        \`temperature\`

     ,

        \`type\`

     ,

        \`identifier\`

     ,

        \`uid\`

     )

    using lute_iot_device.product_property_3yhuya

    tags (



                'SgeOaG8row11UvRf'




         ,

                '3YHuya'



     )

    values

     (



                1762825398206




         ,

                -28800000




         ,

                40.03




         ,

                'property'




         ,

                'report'




         ,

                '1966343341285274047'



     )

这个问题我们也遇到了,你时间戳下面是负数就会出现这个问题,只要保证时间戳下面是正数就可以成功,不知道具体什么原因。

这个问题我们也遇到了,你时间戳下面是负数就会出现这个问题,只要保证时间戳下面是正数就可以成功,不知道具体什么原因。大佬这个是怎么解决的