1.java 实体的移植
主键生成策略有JPA 提供与Hibernate 提供之分
JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.
TABLE:使用一个特定的数据库表格来保存主键。
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY:主键由数据库自动生成(主要是自动增长型)
AUTO:主键由程序控制。
这里如果是mysql数据库一般使用Identity,Oracle 使用Sequence。 当使用Auto时,如果使用Oracle且配置了Sequence则使用Sequence,Mysql则使用Identity 。主键生成策略应该配置为Auto 并配置Squeuence,Oracle转mysql 则不会有问题。
2.DDL的问题
Orcale 里可以写 create or replace table Table_name
Mysql 需要变换为 Drop Table Table_name if exists table_name
create table table_name
3.Mysql需要对自增主键添加 auto_increment
Oracle中一般会先建立表然后通过 alter table 设置表的 主键,这时需要注意,我们需要将主键定义在create table语句中进行。
4.Mysql引擎的选择
Mysql5.*默认为Innodb,支持事物以及行锁表锁,所以应选择Innodb ,但是对于使用空间数据的情况需要使用MyISAM,因为Innodb不支持空间数据
5.数据类型的转换
下表是数据类型映射的表
BIGINT |
NUMBER(19, 0) |
BIT |
RAW |
BLOB |
BLOB, RAW |
CHAR |
CHAR |
DATE |
DATE |
DATETIME |
DATE |
DECIMAL |
FLOAT (24) |
DOUBLE |
FLOAT (24) |
DOUBLE PRECISION |
FLOAT (24) |
ENUM |
VARCHAR2 |
FLOAT |
FLOAT |
INT |
NUMBER(10, 0) |
INTEGER |
NUMBER(10, 0) |
LONGBLOB |
BLOB, RAW |
LONGTEXT |
CLOB, RAW |
MEDIUMBLOB |
BLOB, RAW |
MEDIUMINT |
NUMBER(7, 0) |
MEDIUMTEXT |
CLOB, RAW |
NUMERIC |
NUMBER |
REAL |
FLOAT (24) |
SET |
VARCHAR2 |
SMALLINT |
NUMBER(5, 0) |
TEXT |
VARCHAR2, CLOB |
TIME |
DATE |
TIMESTAMP |
DATE |
TINYBLOB |
RAW |
TINYINT |
NUMBER(3, 0) |
TINYTEXT |
VARCHAR2 |
VARCHAR |
VARCHAR2, CLOB |
YEAR |
NUMBER |
主要关注date,number,varchar2 的转换。其中需要注意 varchar2 的转换,因为在oracle 中varchar2表示存储的字节数,与编码有关,而mysql中varchar则没有,mysql中varchar(30)表示存储30个字符,所以此处需要注意。至于date 因为不需要支持微妙,所以我使用timestamp储存了。
6.常用的系统函数变化
to_date --> char_to_date to_char-->date_to_char ||-->concat
7. hql 中需要注意,避免使用原始sql尽量使用hql,尤其是日期处理。对于空串的处理,在oracle中 varchar2下传入空串则oracle作为 null处理,所以你搜索空串是无结果的
但是mysql中是有空串的. mysql中需要为子查询设置别名要么也会报错。分页查询,mysql中没有rownum,可以使用limit实现,建议使用hql。
8.注意切换hibernate方言
9.触发器与存储过程
oracle的触发器比较高端,对于行触发器支持到按照某列改变触发,而mysql只支持行触发。 oracle中可以判断当前操作类型update,delete 还是 insert,mysql只能分开写 了。变量声明的语法也不相同,需要注意(会详细写一篇)
10。获取当前使用的数据库
我的方法比较屌丝根据Hibernate方言判断使用哪种
11.一些语法上的限制
1). Every derived table must have its own alias
遇到这个问题驱动表需要有一个别名,比如 select sum(money) sum from (select * from guest limit 0,10) t;
2)delete from decode_resource re where re.decode_resource_id=1
这个地方原因未知,delete 中不可以表的别名?去掉re即可
相关推荐
many MySQL customers are migrating from Oracle because they have reached the conclusion that the combination of cost-savings and feature set of MySQL make for a compelling business case to offload ...
Oracle数据库转换成Mysql数据库,可将Oralce数据转换成Mysql数据。
Oracle to MySQL Oracle 转 MySQL亲自测试,好用
一个Oracle to Mysql的实用工具,可以把大部分的oracle库数据,转换到mysql
银行数据库改造之路:Oracle to MySQL迁移实践.pdf
可以直接将Oracle数据库表 导入到 Mysql数据库中。
可以将Oracle数据库与Mysql数据库之间的数据库表和数据进行转换的一个工具
OracleToMysql数据同步 需要ID 作为主键, 需要时间进行比对,没有时间则此方法不可使用。
快速安全地将ORACLE数据库导入为Mysql数据库
MySQL to Oracle MySQL 转 Oracle亲自测试,好用
SpringBoot定时任务实现Oracle和mysql数据同步
支持Oracle 转换 mysql 数据迁移
很多项目是基于Oracle数据库的,Oracle功能强大,但是部署和管理较复杂,更重要的是,购买Oracle的费用不是每个客户都愿意承担的。因此,不少企业迫切需要把项目所用数据库移植到一个简单好用的数据库上。当然,如您...
Dbmover for Mysql to Oracle 是高效的将Mysql导入到Oracle数据库的工具。 使用DBMover可以灵活定义Mysql和Oracle之间表和字段的对照关系,也可以在DBMover创建一个查询,把查询结果当作源表转入到Oracle中。 ...
小工具完成 oracle 到mysql数据库的转换,首先配置oracle 数据库连接,然后配置mysql的数据库连接 下一步就可以了,很好用
Oracle GoldenGate 21.3微服务架构搭建-Oracle2Oracle & MySQL2MySQL
Convert Mysql to Oracle功能特点 可能转换所有的Mysql字段类型 支持所有版本的Mysql 可以将数据合并到已经存在的ORACLE表中 非常容易使用的向导模式 支持所有版本的Mysql字符集 对超大数据表的导出进行了优化处理
convert mysql to oracle 工具,可以将MySQL轻松转换成Oracle