Oracle向mysql进行数据迁移

Oracle向mysql进行数据迁移

1、 需要进行的类型替换

序号Oracle(o)Mysql(m)
1VARCHAR2、NVARCHAR2VARCHAR
2DATEDATETIME
3TIMESTAMPDATETIME
4NUMBERDECIMAL
5INTEGERDECIMAL(22,0)
6CLOBTEXT
7BLOBLONGBLOB
8LONG RAWLONGTEXT
9LONGLONGTEXT

2、常用语法与函数对照

序号Oracle(o)Mysql(m)备注
1NAME IS NULLNAME=’’空字符判断
2Select 1 from dualSelect 1(m)from不是必须
3LikeLike(o)大小写敏感
4Sysdate()Now()获取系统日期
5TO_CHAR()date_format()时间转换为字符串
6TO_DATE()str_to_date()字符转换为时间
7ROWNUM < nLimit n-1取前n-1行
8aIIbIIcConcat(a,b,c)字符串拼接
9SELECT id,name, SUM(a),SUM(b) FROM EMP;SELECT id,name, SUM(a),SUM(b) FROM EMP;(o) 不能正常执行,select后面的列必须是分组的列或者是用了聚合函数的列 (m) 随便分组都可以
10row_number() over (partition by xx order by xx) rank() over (partition by xx order by xx) dense_rank() over (partition by xx order by xx) count(1) over()不支持(m)8.0及以上支持
11Rtrim(x,y)Rtrim(x)(m)只有一个参数
12Date1 – Date2Datediff(d1,d2)(o)日期类型可直接相减;(m)需使用函数
13Nvl(x,y)Ifnull(x,y)
14To_number()Cast(x as 类型)字符串转换数字

3、语法报错与修改

(m) ERROR 1221 (HY000): Incorrect usage of UNION and ORDER BY
(m) ERROR 1221 (HY000): Incorrect usage of UNION and limit

解决:把union all连接的两张表用括号包裹

如:select xxx limit 1 union all select xxx limit 2
改为:(select xxx limit 1 ) union all ( select xxx limit 2)

(m) Error : Every derived table must have its own alias

解决:每一个派生出来的表都必须有一个自己的别名

如:select name form (select * from user)
改为:select name form (select * from user) a

(m) Error : 1093 - You can’t specify target table ‘a’ for update in FROM clause

解决:不能先select出同一表中的某些值,再update这个表(在同一语句中)

如:update testable t set t.age = (select age from testable where id = 1)
改为:update testable t set t.age = (select age from(select age from testable where id = 1) a)

(m) Incorrect datetime value: ‘’ for function str_to_date

解决:从表中select数据时用到str_to_date(date,format)并不报错; 从表中select数据时用到str_to_date(date,format)并将数据insert到另一张表中报错

如:str_to_date(date,format)
改为:str_to_date (if(date=’’, null , date), format)

(m) 无rownum

实现,如:
select a.name,a.age ,@rownum:=@rownum+1 as rownum from  (select * from user order by age) a ,(select @rownum:=0) t

(m) 字段内容及列名大小写不敏感的解决方案

解决:创建表时,将字段标记为binary,二进制大小写是敏感的 或 只要在创建表的时候指定collate为utf8_bin,就可以实现大小写敏感,如果建表时未指定,则可修改字段的校对规则,也可以实现大小写敏感。

如:create table test(id int binary);
create table test(id int) character set utf8 collate utf8_bin;
alter table test modify id collate utf8_bin;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值