1,创建任务配置数据映射关系时,选择忽略目标端大小写的问题
我的源端和目标端都是用的mysql,忽略大小写后,一直报错:查询不到目标仓库表结构,debug追踪源码后发现再下面的代码:
com.mysql.jdbc.DatabaseMetaData#getTables 4644行
results = stmt
.executeQuery((!DatabaseMetaData.this.conn.versionMeetsMinimum(5, 0, 2) ? "SHOW TABLES FROM " : "SHOW FULL TABLES FROM ")
+ StringUtils.quoteIdentifier(catalogStr, DatabaseMetaData.this.quotedId, DatabaseMetaData.this.conn.getPedantic())
+ " LIKE " + StringUtils.quoteIdentifier(tableNamePat, "'", true));
会去查询目标源数据库中有无该数据库和表
当忽略目标端大小写后,会将目标端数据库名称和表名称全部大写,
SHOW TABLES FROM TEST LIKE ‘TEST’;
或
SHOW FULL TABLES FROM TEST LIKE ‘TEST’;
从而找不到目标端的数据库和表。
2,目标端数据库名的中划线问题
之前使用的数据库名称一直是中划线,web开发中没有问题,所以这次使用了中划线,然后就报错
update test-test.test set
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘-test.test set xxx’ at line 1
porter同步数据的时候会将数据库名称放在表名前,从而出错。
在进行MySQL数据库迁移过程中遇到两个主要问题:1)忽略大小写导致查询不到目标库表,因为MySQL在忽略大小写后将数据库和表名转换为大写,与实际不符;2)目标库名包含中划线导致SQL语法错误。解决方案可能包括调整数据库配置以支持大小写敏感或使用引号包裹含中划线的数据库名。

被折叠的 条评论
为什么被折叠?



