Oracle数据转移Mysql中遇到的问题以及解决办法

本文详细介绍了使用Navcat Premium将Oracle数据库中的数据迁移到MySQL数据库的过程,包括三种方法的选择与应用,并重点阐述了如何通过正则表达式解决数据类型转换问题,确保迁移数据的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        前几天因工作需要我得将Oracle数据库中几十张表转移到Mysql中,由于之前没有相关经验,上网简单百度后选用Navcat Premium软件工作。

        Navcat Premium进行数据转移有三种办法:1、复制表  2、导出、导入数据  3、导出成sql脚本,执行。

        一开始使用复制表的方法,打开菜单栏“工具”的数据传输功能,左边选择要复制的表,右边选择连接然后选中目标数据库,接下在就是next by next的一键式操作。这个方法真的很方便,但是bug也很多,最大的bug是数值类型不匹配。Oracle中数值类型是Number2,复制到Mysql中默认为double型,而我需要的是int型。使用这方法失败。

        接着尝试将Oracle表中数据导出为文件再导入Mysql,由于导入导出操作有些复杂,且无法批量操作,需要在Mysql中先创建表,然后逐一导入数据,所以放弃。

        最后尝试将数据以及表结构转储为sql脚本文件,在Mysql中执行。打开菜单栏“工具”的数据传输功能,左边选择要复制的表,右边选择文件。Mysql中执行sql文件时遇到问题,Oracle转储生成的sql脚本文件中数值类型是decimal(xx,xx),日期类型是datetime(x),而Mysql中没有decimal数值类型,日期类型只支持datetime并无显式的大小限定,于是决定用sublime编辑器修改。使用sublime查找功能find all找出所有datetime(xx,xx),统一改为int,执行后发现有错误。原来有的字段类型是decimal(xx,xx)而有的字段类型是decimal(x,x),deciaml(xx,x)……,统一修改时会误删其它字符。于是想到正则表达式匹配,刚好sublime支持正则查找,使用正则查找功能匹配所有decimal(xx,xx),decimal(xx,x),decimal(x,xx)……统一改为int类型,然后用同样的方法修改datetime类型,再执行sql脚本,这下终于成功执行,数据也都是正确的,大功告成!

        最后说说这个方法的局限:如果有这样一个需求,Mysql中部分字段数值类型需要是double、部分需要是int,这该如何是好?暂时能想到的是先在Mysql中创建表,再逐一导入数据。



转载于:https://my.oschina.net/u/1476426/blog/485554

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值