-
Notifications
You must be signed in to change notification settings - Fork 1
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)