由于某项目需要从Oracle改为Mysql服务器,涉及到数据库迁移问题,这里分享下操作流程。

1、用navicat将Oracle表结构和数据迁移到MySQL

选工具-数据传输

 

如图选择传输对象,再点击选项,建议把“遇到错误继续勾选”,否则有时候1、2张表报错,会导致整个传输中断。

选择需要传输的表,这里直接选“运行期间的全部”即可,点击“下一步”开始传输传输结束后记得看看日志,是哪几张表报错,可以根据表结构手动去创建。

 

 

2、项目改成用MySQL数据库

将mysql的jdbc-connect包放入项目,将jdbc.properties的配置改成mysql的

3、Oracle迁Mysql语法修改(这里只列举我遇到的)

问题:Oracle新增的时候使用序列来实现自增主键,并在新增后返回该主键

解决方法:给MySQL表的主键改成int或bigint类型,设置自增,然后SQL改成下面这样

 

问题:Oracle新增的时候使用UUID,并在新增后返回该主键

解决方法:使用replace(uuid(),"-","")来代替

 

问题:Oracle查询时用双引号包住字段名,MySQL不支持这种写法

解决方法:Oracle中双引号包住表示区分大小写,MySQL默认是区分大小写的,直接去掉双引号即可

 

问题:Oracle中直接用sysdate返回当前日期

解决方法:MySQL中改为用sysdate()函数

 

问题:Oracle中模糊查询拼接字符串用“||”来拼接,MySQL中"||"表示or

解决方法:去掉||且单引号改为双引号,即  "%"#{xxxx}"%"

 

问题:Oracle中格式化日期用了to_char()函数,Mysql不支持

解决方法:MySQL中用date_format()函数,一般用date_format('${xxxDate,jdbcType=VARCHAR}', '%Y-%m-%d %H:%i:%S')  这种格式

问题:MySQL中的date_format()函数参数如果是空字符串,则会报错,Oracle则不报错

解决方法:用<if test="xxx != null and xxx != ''”> </if>包裹

 

问题:Oracle用TO_NUMBER()函数来把字符串转换数字格式

解决方法:如果是数字键的运算,不需要转换函数,结果自动为数字类型,其他情况可以用cast(xx as signed int)函数,或者直接在转换的结果后+0,也能转换为数字

 

问题:Oracle用nlssort函数对中文字段进行拼音的排序,MySQL没有这个函数

解决方法:用convert(xxx using GBK)函数,中文字符串转换为GBK编码后就自动按照拼音顺序排列了

 

 

问题:Oracle用listagg()函数将某字段按照组拼接为长字符串

解决方法:用group_concat()+group by的写法实现

 

 

问题:Oracle用start with connect by 递归函数来查询树形结构的结果

解决方法:MySQL中并没有这种类型的相关函数,但可以通过自定义函数实现。这里看到此数据访问只是查询树的跟节点和父节点,MySQL就直接用union来查询根节点和父节点了

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐