Oracle数据库迁移到MySQL数据库

1 字段类型差异

Oracle MySQL 解决方案
varchar2 varchar varchar
date date/time/datetime/timestamp datetime
clob tinytext/text/mediumtext/longtext longtext
blob tinyblob/blob/mediumblob/longblob longblob
number tinyint/smallint/mediumint/int/bigint decimal/float/double Oracle number的取值范围为1-38位
NUMBER(1-2)–TINYINT,
NUMBER(3-4)–SMALLINT ,
NUMBER(5-6)–MEDIUMINT,
NUMBER(7-9)–INT,
NUMBER(10-19)–BIGINT,
NUMBER(20+)或NUMBER(int,int)–DECIMAL
若ORM框架用的Hibernate,建议使用decimal代替number

2 函数差异(附部分案例)

差异项 Oracle MySQL 案例连接
分页 ROWNUM limit或自定义变量
空值转换 NVL(s1,r1):若s1为null,返回r1,否则返回s1;
SELECT NVL(NULL, ‘R’) FROM DUAL;
SELECT NVL(‘S’, ‘R’) FROM DUAL;
Oracle也支持coalesce函数
ifnull(s1,r1)、coalesce(s1,r1)
SELECT coalesce(NULL, ‘R’);
SELECT coalesce(‘S’, ‘R’);
空值转换2 NVL2(s1,r1,r2):若s1为null,返回r2,否则返回r1;
SELECT NVL2(NULL, ‘R1’, ‘R2’) FROM DUAL;
SELECT NVL2(‘S’, ‘R1’, ‘R2’) FROM DUAL;
可以用case when代替
select case when null is null then ‘R2’ else ‘R1’ end;
select case when ‘S’ is null then ‘R2’ else ‘R1’ end;
截取 TRUNC()可以用于数值、日期 对于截取日期可以用date_format+str_to_date实现;
对于数字截取可用truncate()
序列 序列.NEXTVAL 无序列
系统日期 SYSDATE sysdate()、NOW()
添加月份 ADD_MONTHS(date, int)
SELECT add_months(to_date(‘2021-05-19’,‘yyyy-MM-dd’), 1) FROM dual;
date_add(date, INTERVAL int month)
select date_add(str_to_date(‘2021-05-19’,’%Y-%m-%d’), interval 1 month);
两日期间隔的月份 MONTHS_BETWEEN(date1,date2) (date1-date2的天数)/31,保留9位小数
类型转换 TO_DATE()
SELECT TO_DATE(‘2021-05-19 17:15:33’,‘yyyy-MM-dd hh24:mi:ss’) FROM DUAL;
str_to_date()
select str_to_date(‘2021-05-19 17:15:33’,’%Y-%m-%d %H:%i:%s’);
TO_CHAR(date)
TO_CHAR(number)
date_format(date)
cast(number as char)
convert(number,char)
SELECT CONVERT(‘test’, CHAR CHARACTER SET utf8);
SELECT CAST(‘test’ AS CHAR CHARACTER SET utf8);
字符串截取 SUBSTR(str,int,int) 第二个参数可正负0 SUBSTR(str,int,int) 第二个参数可正负,若为0则返回空字符串
INSTR INSTR(str,subStr,pos)三个参数,可指定开始位置,pos=0返回0,pos<0,从尾面开始查找 instr(str,subStr)两个参数
locate(subStr,str,pos):pos<=0时返回0
字符串连接 ||、CONCAT(s1,s2),concat只能有两个参数 concat(s1,s2,s3,…)可有多个参数
字符串替换 replace(str, substr)
replace(str,substr,repstr)
仅支持replace(str,substr,repstr)
行转列 WM_CONCAT、LISTAGG group_concat
条件选择 DECODE case when
正则 REGEXP_LIKE(expr,pat) expr REGEXP pat

3 其他差异

差异项 Oracle MySQL
全局临时表 支持 不支持
表分区 支持 支持,但有主键是分区字段必须是主键字段
FULL JOIN 支持 不支持,left join + right join
DELETE 可以没有from关键字
可以用exists
必须有from
不可以用exists
正则表达式 REGEXP_SUBSTR() REGEXP
集合相减 Minus 无,可用not in
NULL和’’ ORACLE认为’‘等同于NULL
LENGTH(’’)为NULL TO_DATE(’’,‘YYYYMMDD’)为空 TO_NUMBER(’’,1)为NULL
oracle中’’,数值类型的插入,NULL oracle中’’,字符类型,NULL oracle中’’,时间类型,NULL
NULL和’‘不同 LENGTH(’’)为0 TO_DATE(’’,‘YYYYMMDD’),报错
TO_NUMBER(’’,1),报错
MySQL中’’ 数值类型的插入,报错 MySQL中’’ 字符类型,’’ MySQL中’’ 时间类型,报错
合并 MERGE INTO 无此语法,用存储过程
group by having oracle having语句可以在group by之前 MySQL having语句必须在group by之后
去重 unique、distinct distinct
不等于 Oracle中 ! =,< >操作符中间允许有空格 MySQL中不可以,且字符类型与数字类型不可比较
别名 派生表(即子查询形成的视图)有无别名皆可 ,别名可重复 MySQL派生表必须有别名 ,别名不可重复,DELETE不能有别名
其它 支持中文空格,中文逗号 不支持
数字+and/or 之间可以无空格 不支持

Oracle数据库迁移到MySQL数据库相关推荐

  1. 从sqlite 迁移 mysql_将 Ghost 从 SQLite3 数据库迁移到 MySQL 数据库

    下面我们就来说说如何从 SQLite 迁移到 MySQL . 准备 首先你要已经安装好 MySQL 数据库.如果你用的是 Ubuntu 系统,请参考这篇文章.其他系统请参考各自对应的文档. 导出当前数 ...

  2. mysql 修复数据表 批量_MySQL数据库迁移与MySQL数据库批量恢复

    一.MySQL数据库迁移或备份 将相关数据库数据文件直接迁移方式 1. 了解使用InnoDB引擎创建数据库所产生的文件 使用MySQL InnoDB引擎所产生的文件(三个文件都很重要) .ibd:包含 ...

  3. 将数据导入到mysql_06955.10.2如何将CM的外部PostgreSQL数据库迁移至MySQL服务

    作者:朱超杰 文档编写目的 在前面的文章<如何将CM内嵌PostgreSQL服务迁移至外部PostgreSQL服务>介绍了将CM内嵌的PostgreSQL迁移至外部PostgreSQL,因 ...

  4. ef 数据迁移mysql_07116.3.0如何将CM的外部PostgreSQL数据库迁移至MySQL服务

    文档编写目的 在前面的文章<6.3.0-如何将CM内嵌PostgreSQL服务迁移至外部PostgreSQL服务>介绍了将CM内嵌的PostgreSQL迁移至外部PostgreSQL,因为 ...

  5. navicat premium相关应用(将oracle数据库迁移到mysql等)

    navicat premium navicat premium连接到oracle数据库:http://blog.csdn.net/zjx86320/article/details/49464251: ...

  6. Oracle数据库迁移到MySQL

    Oracle数据库迁移到MySQL 因为公司需要,需要将项目从Oracle数据库迁移到MySql找了很多方式,这里记较稳定的. 一.使用MySQL Migration Toolkit 1.安装 首先( ...

  7. ssh项目同时使用mysql跟sqlserver数据库_MSSQL_如何把sqlserver数据迁移到mysql数据库及需要注意事项,在项目开发中,有时由于项目 - phpStudy...

    如何把sqlserver数据迁移到mysql数据库及需要注意事项 在项目开发中,有时由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Serve ...

  8. abp mysql .net core_ABP .Net Core Entity Framework迁移使用MySql数据库

    一.迁移说明 ABP模板项目Entity Framework Core默认使用的是Sql Server,也很容易将数据库迁移到MySQL,步骤如下. 二.迁移MySQL步骤 1. 下载项目 请到 ht ...

  9. ABP .Net Core Entity Framework迁移使用MySql数据库

    一.迁移说明 ABP模板项目Entity Framework Core默认使用的是Sql Server,也很容易将数据库迁移到MySQL,步骤如下. 二.迁移MySQL步骤 1. 下载项目 请到 ht ...

最新文章

  1. 禅道设置bug模板_JPress v3.0 beta.2 发布,修复 bug 和完善产品细节
  2. iframe的sandbox使用
  3. Gitlab 官方对整个数据删除事件的详细说明
  4. Field-Symbols总结
  5. c语言多线编程程序,C语言之多线编程 来看看?
  6. [CareerCup] 4.7 Lowest Common Ancestor of a Binary Search Tree 二叉树的最小共同父节点
  7. JAVA入门级教学之(对象的创建和使用)
  8. #paragma详解
  9. Lucene的分析过程
  10. android拦截黑名单电话和短信
  11. 最新更新云码支付,星糖付多合一全自动码商,商户,代理,支付一体系统完整数据源码
  12. 银行软件测试项目管理中存在的问题及解决的对策
  13. 微信小程序中的常用布局方式(总结)
  14. 棕色和褐色的区别及联系
  15. git merge冲突解决
  16. c语言直线和椭圆的交点,直线与椭圆交点距离公式
  17. 大数据杀熟!我被美团会员割了韭菜
  18. 初学原生ajax(1):原生AJAX的简单介绍与使用
  19. ubuntu18.04无法安装最新显卡驱动解决办法
  20. 重卡自动驾驶进入“正规战”

热门文章

  1. Nginx443端口被System占用解决方式
  2. springboot-如何运行jsp项目?
  3. 世界上第一台电子计算机ENIAC诞辰60周年--(1946.2.15-2006.2.15)
  4. 程序员的自我救赎---1.4.1:核心框架讲解(DAL)
  5. 图像的梯度方向matlab,基于梯度方向的图像边缘检测方法与流程
  6. 【Spring Data JPA自学笔记五】一对多、多对多和级联
  7. Java管理SSL证书
  8. 龙珠直播CTO谭振林:从0到500万用户背后的技术架构变迁
  9. React学习分享(三)
  10. mysql是如何保证三类完整性约束的,MySQL-完整性约束