开发者社区> 问答> 正文

timestamp字段类型,读取数据有误

版本:canal.deployer-1.1.3 mysql5.7.2 timestamp类型的字段,通过column.getValue()时,取出时间有误。相差12小时。

字段定义: event_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(4) ON UPDATE CURRENT_TIMESTAMP(4),

insert into tm(event_time,start_date) VALUES('2019-06-15 11:27:01.905','2019-06-15 11:27:01') 读取到的数据: ventType : INSERT id : 15 update=true event_time : 2019-06-14 23:27:01.905 update=true start_date : 2019-06-15 11:27:01 update=true

原提问者GitHub用户barlowzj

展开
收起
云上静思 2023-05-04 12:54:51 123 0
2 条回答
写回答
取消 提交回答
  • 估计是数据库的时区问题,可以查询物理的binlog文件,通过mysqlbinlog解析看看

    原回答者GitHub用户agapple

    2023-05-05 10:38:12
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    timestamp 类型的字段在 Canal 中默认会被解析为时间戳类型,因此在通过 column.getValue() 方法读取时,可能会发生时区转换的问题,导致读取到的时间有误。为了解决这个问题,可以尝试以下方法:

    修改数据类型:将 timestamp 类型的字段改为 datetime 类型的字段,这样可以避免时区转换的问题,并保证读取到的时间是正确的。可以使用 SQL 语句修改数据表的结构,例如: ALTER TABLE table_name MODIFY event_time datetime(3) DEFAULT CURRENT_TIMESTAMP(4) ON UPDATE CURRENT_TIMESTAMP(4);

    修改 Canal 配置:可以通过修改 Canal 的配置文件 canal.properties,将解析 timestamp 类型的字段的转换规则修改为 DATETIME。具体来说,可以在配置文件中添加以下配置: canal.instance.filter.regex=.* canal.instance.filter.black.regex=mysql.binlog..* canal.instance.filter.druid=false canal.instance.filter.field=list canal.instance.filter.query.dcl=false canal.instance.filter.query.dml=false canal.instance.filter.table.error=false canal.instance.filter.table.regex=.* canal.instance.filter.transaction=true canal.instance.filter.ddl=false canal.instance.filter.skip.dml=false canal.instance.filter.skip.ddl=false canal.instance.filter.skip.query.dcl=false canal.instance.filter.skip.query.dml=false canal.instance.filter.skip.query.ddl=false canal.instance.parser.mode=mysql canal.instance.mysql.slaveId=1234 canal.instance.enable.table.meta.manager=false canal.instance.binlog.mode=ROW canal.instance.binlog.position.reset=true canal.instance.gtidon=false canal.instance.tsdb.enable=false canal.instance.tsdb.url=jdbc:mysql://ip:3306/canal_tsdb canal.instance.tsdb.dbUsername=canal canal.instance.tsdb.dbPassword=canal canal.instance.tsdb.batchGetSize=1000 canal.instance.channel.memoryBatchSize=25 canal.instance.channel.memoryTransactionBatchSize=1000 canal.instance.channel.fileBackupDir=/data/canal/canal/canal_log canal.instance.channel.checkValid=false canal.instance.channel.recoverMode=crash canal.instance.memoryTable=false canal.instance.network.receiveBufferSize=65535 canal.instance.network.sendBufferSize=131072 canal.instance.network.soTimeout=30s canal.instance.network.readTimeout=30s canal.instance.network.idleTimeout=5m canal.instance.network.bindIp= canal.instance.network.zookeeper.address= canal.instance.network.zookeeper.sessionTimeout=5000 canal.instance.network.zookeeper.retryTimes=3 canal.instance.network.zookeeper.retryInterval=1000 canal.instance.network.zookeeper.heartbeat.enable=true canal.instance.network.zookeeper.heartbeat.topic= canal.instance.network.zookeeper.heartbeat.interval=5000 canal.instance.network.zookeeper.heartbeat.ttl=15000 canal.instance.network.zookeeper.group= canal.instance.network.zookeeper.rootNode= canal.instance.network.zookeeper.authEnable=false canal.instance.network.zookeeper.authUsername= canal.instance.network.zookeeper.authPassword=

    需要注意的是,在修改 Canal 的配置时,也需要保证时间是正确的。可以通过修改服务器的时区设置,或者在 Canal 的参数中设置时间偏移量等方式来解决时间问题。同时,在修改数据类型时,也需要注意数据的兼容性和正确性,以避免出现数据不一致或查询错误的问题。

    2023-05-04 17:59:15
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云MaxCompute百问百答 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载