From af432bf10a8c4ad4ca879e868e145d0223082b78 Mon Sep 17 00:00:00 2001 From: He Wang Date: Fri, 13 May 2022 14:33:06 +0800 Subject: [PATCH] fix data truncated for column issue for type `year` (#3866) --- .../canal/client/adapter/rdb/service/RdbSyncService.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/client-adapter/rdb/src/main/java/com/alibaba/otter/canal/client/adapter/rdb/service/RdbSyncService.java b/client-adapter/rdb/src/main/java/com/alibaba/otter/canal/client/adapter/rdb/service/RdbSyncService.java index 042667f3..17830e44 100644 --- a/client-adapter/rdb/src/main/java/com/alibaba/otter/canal/client/adapter/rdb/service/RdbSyncService.java +++ b/client-adapter/rdb/src/main/java/com/alibaba/otter/canal/client/adapter/rdb/service/RdbSyncService.java @@ -3,6 +3,7 @@ package com.alibaba.otter.canal.client.adapter.rdb.service; import java.sql.Connection; import java.sql.ResultSetMetaData; import java.sql.SQLException; +import java.sql.Types; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -432,7 +433,12 @@ public class RdbSyncService { ResultSetMetaData rsd = rs.getMetaData(); int columnCount = rsd.getColumnCount(); for (int i = 1; i <= columnCount; i++) { - columnTypeTmp.put(rsd.getColumnName(i).toLowerCase(), rsd.getColumnType(i)); + int colType = rsd.getColumnType(i); + // 修复year类型作为date处理时的data truncated问题 + if ("YEAR".equals(rsd.getColumnTypeName(i))) { + colType = Types.VARCHAR; + } + columnTypeTmp.put(rsd.getColumnName(i).toLowerCase(), colType); } columnsTypeCache.put(cacheKey, columnTypeTmp); } catch (SQLException e) {