瀏覽代碼

Update LogEventConvert.java (#4653)

fixed issue #4652,  解决mysql中类型为MEDIUMTEXT的字段的javaType在不同场景的解析不一致的问题
starrywu 2 年之前
父節點
當前提交
b52c5d149b

+ 17 - 0
parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java

@@ -754,6 +754,23 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar
             int javaType = buffer.getJavaType();
             if (buffer.isNull()) {
                 columnBuilder.setIsNull(true);
+                
+                // 处理各种类型
+                switch (javaType) {
+                    case Types.BINARY:
+                    case Types.VARBINARY:
+                    case Types.LONGVARBINARY:
+
+                        // https://github.com/alibaba/canal/issues/4652
+                        // mysql binlog中blob/text都处理为blob类型,需要反查table
+                        // meta,按编码解析text
+                        if (fieldMeta != null && isText(fieldMeta.getColumnType())) {
+                            javaType = Types.CLOB;
+                        } else {
+                            javaType = Types.BLOB;
+                        }
+                        break;
+                }
             } else {
                 final Serializable value = buffer.getValue();
                 // 处理各种类型