Skip to content

converter

wz2cool edited this page May 9, 2019 · 11 revisions

转换器

简介

转换器的目的其实是为了把 canal 中的 mysql 中 sql 语句转换到不同数据库上执行,举个例子添加一个列:
Mysql: alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(20);
oracle: alter table TABLE_NAME ADD (NEW_COLUMN_NAME nvarchar2(20));
不同数据库的 sql 对添加列发现其实是不一样的, 这个就是需要转换器进行转换。

类型支持

对于数据源 Mysql 也不是所有类型都是支持的,所以一定要注意了!

类型 是否支持
BIT Y
TINYINT Y
SMALLINT Y
MEDIUMINT Y
INT Y
INTEGER Y
BIGINT Y
FLOAT Y
DOUBLE Y
DECIMAL Y
DATE Y
DATETIME Y
TIMESTAMP Y
TIME Y
CHAR Y
VARCHAR Y
TINYBLOB Y
BLOB Y
MEDIUMBLOB Y
LONGBLOB Y
TINYTEXT Y
TEXT Y
MEDIUMTEXT Y
LONGTEXT Y
ENUM N
REAL N
SET N
YEAR N
NUMERIC N
BINARY N
VARBINARY N

目标数据库

其他问题

  • CHAR 数据映射
    这里我会把所有 CHAR 类型映射到 VARCHAR 上面,主要是我插入以后查询出来的字符串都会带空格,可能是 CHAR 是定长的原因,所有这里我都映射到了变长上面去了。
  • DOUBLE, FLOAT, DECIMAL 精度设置
    精度必须要设置,因为不设置的话,比如db2 数据库的 DECIMAL 字段会截取掉小数部分,所以请设置精度,比如 DECIMAL (18, 6)