数据库迁移及区别比较(Oracle,Sql Server,MySql)

  • 格式:doc
  • 大小:47.00 KB
  • 文档页数:7

下载文档原格式

  / 11
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据库迁移及及区别(Oracle,MySQL,SQLServer)

/brightmart

徐亮,2011-4-1

导言:最近的数据超市项目需要从SQLServer迁移到MySql。在之前并没有很多数据库迁移方面的经验,所以也不知道迁移需要花费多久,都要做什么工作。通过几天的工作,项目已经顺利迁移到MySql上。该文档总结了迁移的经验,同时也方便以后数据库迁移。

1、数据库迁移需要做的工作

1.1 建表脚本修改

1.2 数据导入(编码、数据类型设置)

1.3 项目中的SQL修改

1.4 数据库连接(驱动)

1.5 连接项目中的程序,测试并修改程序

2、常用数据库中在开发方面的不同

2.1 数据类型

2.2 自增

2.3 分页

2.4 内置函数

2.5 模糊查询

3、ORM工具与迁移

使用hibernate、ibatis,在数据库迁移中的不同效率

4、各数据库的不同数据类型比较及参考资料

4.1、MySQL中的建表SQL

4.2、Java到SQL数据类型影射表

4.3、MySql与Oracle数据类型的相互转化

4.4、ORACLE与SQLSERVER、MYSQL的数据类型对照表

1、数据库迁移需要做的工作

1、1 数据库建表脚本的修改

1.1.1 由于各种数据库的数据类型并不相同,需要更改部分数据类型。

1.1.2 在MySQL脚本里暂不能给日期数据设置当前时间,字段如:registertime(注册时间);需在程序中设置当前日期,再保存进数据库或将registertime设置为时间戳(timestamp)

1.1.3 在MySQL里的表和字段的注释,见【5】中的建表语句。

1、2 将数据导入到目标数据库的中(其中可以需要修改数据类型)

1.2.1设置数据库的编码,防止中文乱码

1)、最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,

如:default-character-set = utf8

(character_set_server = utf8)

修改完后,重启mysql的服务,service mysql restart

2)、还有一种修改字符集的方法,就是使用mysql的命令,如:

mysql> SET character_set_client = utf8 ;mysql> SET character_set_connection = utf8 ;

mysql> SET character_set_database = utf8 ;mysql> SET character_set_results = utf8 ;mysql> SET character_set_server = utf8 ;mysql> SET collation_connection = utf8 ;mysql> SET collation_database = utf8 ; mysql> SET collation_server = utf8 ;

如果:没有设置前两条,可以通过以下方式实现编码:

a 建数据库时设置数据库支持的编码:create database datmart charset=utf8;

b 使用数据库datmart use datmart;

c 插入中文数据时,需要先设置:set names utf8;

d 将数据导入source

d:\datmart.sql

(每个见表语句后加:ENGINE=MyISAM DEFAULT CHARSET=utf8;)

1.2.2 数据类型

即使MySQL中有bit,但SQLServer中的bit类型(取0或1,分别对应了bool的true和false)的变量在MySQL中,不能顺利导入。需要将其设置为tinyint(1),才能顺利导入。

12.3导入数据

采用第三方工具,如Navicat 8,通过微软提供的ODBC连接数据源,并导入数据或者自己写一个通用程序,将全部数据读入在写进新的数据库中。

1、3 修改项目中的SQL,使得SQL在目标数据库里也可以使用

1.4 数据库连接(下载驱动)

SQLServer的数据库连接:

datamart_driver=com.microsoft.sqlserver.jdbc.SQLServerDriver

datamart_url=jdbc:sqlserver://172.16.6.23:1433;DatabaseName=datamart

MySql的数据库连接:

datamart_driver=com.mysql.jdbc.Driver

datamart_url=jdbc:mysql://172.16.6.23:3306/datamart

Oracle的数据库连接:

datamart_driver=oracle.jdbc.driver.OracleDriver

datamart_url=jdbc:oracle:thin:@172.16.6.26:1521:datamart

用户名和密码都是:

datamart_username=root

datamart_password=sd100301

2、常用数据库中在开发方面的不同

2.1 分页、2.2内置函数、2.3自增 2.4存储过程2.5模糊查询

2.1 分页

Oracle中的分页:可以采用rownumber实现;SQLServer中的分页,采用内容函数row_number() 实现;MySQL中采用limit。

Oracle中的SQL:

select rn,first_name,salary

from(select rownum as rn,frist_name,salary

from (select first_name,salary from s_emp order by salary))

where rn between 11 and 20

SQLServer中的SQL:

select * from( select row_number() over(order by salary desc) as rownumber,*

from s_emp where salary>3000

) as tb

where rownumber between 11 and 20

MySQL中基本的SQL:

select * from apiinfo where id<41

order by enname desc

limit 5,200

2.2 内置函数

数据库中有许多内置函数,不少是用于处理字符串、日期等的。

SQLServer的len(),相当于MySQL的length(),相当于Oracle的Len().

2.3 自增

2.3.1 自增关键字