1、问题原因
Canal中间件版本升级,读取TINYINT类型逻辑发生变化。
Canal版本1.1.4之前的源码,转换binlog的数据类型。跟Mysql的保持一致,TINYINT(1)会默认转换成java.sql.Types.TINYINT(-6)。即Boolean类型
升级之后的版本,源码 LogEventConvert.java 、778行 发现如果是TINYINT类型,且只有一个Bit,即TINYINT(1),canal会将读取数据的sqlType设置为java.sql.Types.BIT(-7)。即String类型
2、解决方案
1、回退到1.1.4之前的Canal版本。
2、重写类型转换逻辑。