iverycd / OracleSync2MySQL

Oracle to MySQL, PolarDB, Percona Server MySQL, MariaDB, OceanBase, TiDB, GaussDB for MySQL
MIT License
50 stars 16 forks source link

使用selFromYml迁移时的表名大写问题 #3

Open Aquarius10th opened 11 months ago

Aquarius10th commented 11 months ago

root.go文件调用 db.TableCreate(logDir, tableName, ch) 之前,没有将表名转大写,函数内部的 colTotalSql 查询不到表对应的列,进而导致createTblSql拼接的结果不完整(实际拼接结果为:create table `abc` ( )。

转大写的逻辑在 create.go 里是有的,我本地修改源码,把这一段复制过来可以正常创建数据表了:

if selFromYml { //-s自定义迁移表的时候,统一把yml文件的表名转为大写(否则查询语句的表名都是小写),原因是map键值对(key:value),key的值始终为小写的值
    tableName = strings.ToUpper(tableName)
}

由于对go语言不熟悉,还请作者自己确认后调整一下。

iverycd commented 11 months ago

感谢您的提醒,原因是获取yaml配置文件表名的时候,使用的库Viper会把key值统一转为小写,导致在oracle数据字典中查询失败。

已发布最新release,在使用-s方式迁移的时候,会把配置文件中的表名统一转为大写

附Viper官方在获取key的时候不区分大小写的回答 image