Oracle数据库迁移到MySQL数据库
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数据库相关推荐
- 从sqlite 迁移 mysql_将 Ghost 从 SQLite3 数据库迁移到 MySQL 数据库
下面我们就来说说如何从 SQLite 迁移到 MySQL . 准备 首先你要已经安装好 MySQL 数据库.如果你用的是 Ubuntu 系统,请参考这篇文章.其他系统请参考各自对应的文档. 导出当前数 ...
- mysql 修复数据表 批量_MySQL数据库迁移与MySQL数据库批量恢复
一.MySQL数据库迁移或备份 将相关数据库数据文件直接迁移方式 1. 了解使用InnoDB引擎创建数据库所产生的文件 使用MySQL InnoDB引擎所产生的文件(三个文件都很重要) .ibd:包含 ...
- 将数据导入到mysql_06955.10.2如何将CM的外部PostgreSQL数据库迁移至MySQL服务
作者:朱超杰 文档编写目的 在前面的文章<如何将CM内嵌PostgreSQL服务迁移至外部PostgreSQL服务>介绍了将CM内嵌的PostgreSQL迁移至外部PostgreSQL,因 ...
- ef 数据迁移mysql_07116.3.0如何将CM的外部PostgreSQL数据库迁移至MySQL服务
文档编写目的 在前面的文章<6.3.0-如何将CM内嵌PostgreSQL服务迁移至外部PostgreSQL服务>介绍了将CM内嵌的PostgreSQL迁移至外部PostgreSQL,因为 ...
- navicat premium相关应用(将oracle数据库迁移到mysql等)
navicat premium navicat premium连接到oracle数据库:http://blog.csdn.net/zjx86320/article/details/49464251: ...
- Oracle数据库迁移到MySQL
Oracle数据库迁移到MySQL 因为公司需要,需要将项目从Oracle数据库迁移到MySql找了很多方式,这里记较稳定的. 一.使用MySQL Migration Toolkit 1.安装 首先( ...
- ssh项目同时使用mysql跟sqlserver数据库_MSSQL_如何把sqlserver数据迁移到mysql数据库及需要注意事项,在项目开发中,有时由于项目 - phpStudy...
如何把sqlserver数据迁移到mysql数据库及需要注意事项 在项目开发中,有时由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Serve ...
- abp mysql .net core_ABP .Net Core Entity Framework迁移使用MySql数据库
一.迁移说明 ABP模板项目Entity Framework Core默认使用的是Sql Server,也很容易将数据库迁移到MySQL,步骤如下. 二.迁移MySQL步骤 1. 下载项目 请到 ht ...
- ABP .Net Core Entity Framework迁移使用MySql数据库
一.迁移说明 ABP模板项目Entity Framework Core默认使用的是Sql Server,也很容易将数据库迁移到MySQL,步骤如下. 二.迁移MySQL步骤 1. 下载项目 请到 ht ...
最新文章
- 禅道设置bug模板_JPress v3.0 beta.2 发布,修复 bug 和完善产品细节
- iframe的sandbox使用
- Gitlab 官方对整个数据删除事件的详细说明
- Field-Symbols总结
- c语言多线编程程序,C语言之多线编程 来看看?
- [CareerCup] 4.7 Lowest Common Ancestor of a Binary Search Tree 二叉树的最小共同父节点
- JAVA入门级教学之(对象的创建和使用)
- #paragma详解
- Lucene的分析过程
- android拦截黑名单电话和短信
- 最新更新云码支付,星糖付多合一全自动码商,商户,代理,支付一体系统完整数据源码
- 银行软件测试项目管理中存在的问题及解决的对策
- 微信小程序中的常用布局方式(总结)
- 棕色和褐色的区别及联系
- git merge冲突解决
- c语言直线和椭圆的交点,直线与椭圆交点距离公式
- 大数据杀熟!我被美团会员割了韭菜
- 初学原生ajax(1):原生AJAX的简单介绍与使用
- ubuntu18.04无法安装最新显卡驱动解决办法
- 重卡自动驾驶进入“正规战”
热门文章
- Nginx443端口被System占用解决方式
- springboot-如何运行jsp项目?
- 世界上第一台电子计算机ENIAC诞辰60周年--(1946.2.15-2006.2.15)
- 程序员的自我救赎---1.4.1:核心框架讲解(DAL)
- 图像的梯度方向matlab,基于梯度方向的图像边缘检测方法与流程
- 【Spring Data JPA自学笔记五】一对多、多对多和级联
- Java管理SSL证书
- 龙珠直播CTO谭振林:从0到500万用户背后的技术架构变迁
- React学习分享(三)
- mysql是如何保证三类完整性约束的,MySQL-完整性约束