数据库迁移及及区别(Oracle,MySQL,SQLServer)
来源:互联网 发布:工频变压器计算软件 编辑:程序博客网 时间:2024/05/16 15:29
图:MySQL的第三方图形用户界面工具,可以方便查询、设计、导出导入数据(Navicat)
导言:最近的数据超市项目需要从SQLServer迁移到MySql。在之前并没有很多数据库迁移方面的经验,所以也不知道迁移需要花费多久,都要做什么工作。通过几天的工作,项目已经顺利迁移到MySql上。该文档总结了迁移的经验,同时也方便以后数据库迁移。
1、数据库迁移需要做的工作
1.1
1.2
1.3
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、
4.4、ORACLE与SQLSERVER、MYSQL的数据类型对照表
1、数据库迁移需要做的工作
1、1
1.1.1
1.1.2
1.1.3
1、2
1.2.1设置数据库的编码,防止中文乱码
1)、最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,
如:default-character-set
(character_set_server
修改完后,重启mysql的服务,service
2)、还有一种修改字符集的方法,就是使用mysql的命令,如:
mysql>
mysql>
如果:没有设置前两条,可以通过以下方式实现编码:
a
(每个见表语句后加:ENGINE=MyISAM
1.2.2
即使MySQL中有bit,但SQLServer中的bit类型(取0或1,分别对应了bool的true和false)的变量在MySQL中,不能顺利导入。需要将其设置为tinyint(1),才能顺利导入。
12.3导入数据
1、3
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.1
Oracle中的分页:可以采用rownumber实现;SQLServer中的分页,采用内容函数row_number()
Oracle中的SQL:
SQLServer中的SQL:
select
where
MySQL中基本的SQL:
select
order
limit
2.2
数据库中有许多内置函数,不少是用于处理字符串、日期等的。
SQLServer的len(),相当于MySQL的length(),相当于Oracle的Len().
2.3
2.3.1
Oralce:
2.3.2
定义:CREATE
INCREMENT
START
NOMAXVALUE
NOCYCLE
使用:emp_sequence.CURRVAL
2.3.3
问题:(oracle中的自增字段,如果它的值不是连续的,并且您将其做为主键,那么迁移到其它数据库时候,那些不连续的值发生了改变。而其它表是与该字段关联的,这样程序就会出错)
解决方式:在目标数据库中建立统一的表,并有同样的字段但不自增;导入数据后,再修改表的结构,使得该字段自增。
2.3.4
insert
select
from
2.4
不同的数据库存储过程相差的比SQL间的差异到大,所以项目中的存储过程需要改不少地方。或者,如果对性能影响不大,可以不用存储过程。
2.5
在SQLServer中,模糊查询可以使用
select
但在MySql中,则需改为:
select
or
select
注:#key#,是方法中传入的值;MySQL中的SQL使用了REGEXP,是正则表达式
3、ORM工具与迁移
使用hibernate、ibatis,在数据库迁移中的不同效率
ibatis:sql需要自己写 hibernate:sql自动生成;
Hibernate的特点:Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快。
iBATIS的特点:iBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。iBATIS的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
易迁移行比较:对于数据库迁移来说,常用的数据库操作,如增删改查等,在hibernate中基本不需要改动;而ibatis中是自己写的针对特定数据库类型的SQL,所以需要改不少内容。
4、各数据库的不同数据类型比较及参考资料
4.1
CREATE
)
4.2:Java到SQL数据类型影射表
String
VARCHAR
java.math.BigDecimal
NUMERIC
Boolean
BIT
Byte
TINYINT
Short
SMALLINT
Int
INTEGER
Long
BIGINT
Float
REAL
Double
DOUBLE
byte[]
VARBINARY
java.sql.Date
DATE
java.sql.Time
TIME
java.sql.Timestamp
TIMESTAMP
4.3
BIGINT
NUMBER(19,
BIT
RAW
BLOB
BLOB,
CHAR
CHAR
DATE
DATE
DATETIME
DATE
DECIMAL
FLOAT
DOUBLE
FLOAT
DOUBLE
FLOAT
ENUM
VARCHAR2
FLOAT
FLOAT
INT
NUMBER(10,
INTEGER
NUMBER(10,
LONGBLOB
BLOB,
LONGTEXT
CLOB,
MEDIUMBLOB
BLOB,
MEDIUMINT
NUMBER(7,
MEDIUMTEXT
CLOB,
NUMERIC
NUMBER
REAL
FLOAT
SET
VARCHAR2
SMALLINT
NUMBER(5,
TEXT
VARCHAR2,
TIME
DATE
TIMESTAMP
DATE
TINYBLOB
RAW
TINYINT
NUMBER(3,
TINYTEXT
VARCHAR2
VARCHAR
VARCHAR2,
YEAR
NUMBER
4.4
Oracle
SQL
Mysql数据类型
BFILE
VARBINARY(MAX)
BLOB
VARBINARY(MAX)
BLOB,
CHAR([1-2000])
CHAR([1-2000])
CHAR
CLOB
VARCHAR(MAX)
TEXT,
DATE
DATETIME
DATE,DATETIME,
FLOAT
FLOAT
REAL,
DECIMAL,
FLOAT([1-53])
FLOAT([1-53])
FLOAT([54-126])
FLOAT
INT
NUMERIC(38)
INTERVAL
DATETIME
LONG
VARCHAR(MAX)
LONG
IMAGE
NCHAR([1-1000])
NCHAR([1-1000])
NCLOB
NVARCHAR(MAX)
NUMBER
FLOAT
INT,
NUMBER([1-38])
NUMERIC([1-38])
SMALLINT,
NUMBER([0-38],[1-38])
NUMERIC([0-38],[1-38])
NVARCHAR2([1-2000])
NVARCHAR([1-2000])
SET,
RAW([1-2000])
VARBINARY([1-2000])
BLOB,BIT,
REAL
FLOAT
ROWID
CHAR(18)
TIMESTAMP
DATETIME
UROWID
CHAR(18)
VARCHAR2([1-4000])
VARCHAR([1-4000])
TEXT,
- 数据库迁移及及区别(Oracle,MySQL,SQLServer)
- 数据库迁移及及区别(Oracle,MySQL,SQLServer)
- 数据库的迁移总结及区别比较(Oracle,MySQL,SQLServer)
- oracle、sqlserver及mysql数据库版本查看
- MySQL,SQLSERVER,ORACLE获取数据库表名及字段名
- Oracle与mysql数据迁移及解决方案
- MySQL与SQLite的区别及迁移
- mysql,sqlserver及oracle分页查询
- oracle mysql sqlserver 查看当前所有数据库及数据库基本操作命令
- oracle mysql sqlserver 查看当前所有数据库及数据库基本操作命令
- oracle mysql sqlserver 查看当前所有数据库及数据库基本操作命令
- oracle mysql sqlserver 查看当前所有数据库及数据库基本操作命令
- oracle mysql sqlserver 查看当前所有数据库及数据库基本操作命令
- oracle数据库迁移至mysql 之 sysdate格式化及运算替换
- oracle数据库迁移至mysql 之 sysdate格式化及运算替换
- Oracle数据库迁移MySql
- oracle 数据库迁移MySQL
- sqlserver数据库迁移至oracle数据库
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- easyUI datagrid 行内容超过添加(...)
- The difference of HLS and http Progressive download streaming
- iPhone开发基础教程笔记(五)--第六章 多视图应用程序
- 把触发器说透
- 数据库迁移及及区别(Oracle,MySQL,SQLServer)
- shell——tr的用法
- 嵌入式根文件系统的移植和制作详解
- SQL Server中tempdb的管理
- 变量对象Variable Object 使用方法
- 中文分词方法简介
- 字典序问题
- iPhone开发基础教程笔记(六)--第七章 标签栏与选取器
- linux crontab命令参数及用法详解--linux自动化定时任务cron