博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库 SQL Server 到 MySQL 迁移方法总结
阅读量:6680 次
发布时间:2019-06-25

本文共 3664 字,大约阅读时间需要 12 分钟。

最近接手一起老项目数据库 SQL Server 到 MySQL 的迁移。因此迁移前进行了一些调查和总结。下面是一些 SQL Server 到 MySQL 的迁移方法。

1. 使用 SQLyog 迁移

具体方法可以参加:http://www.cnblogs.com/gaizai/p/3237907.html

优点:该迁移方法很简单,灵活,迁移时,可以进行字段的修改,比如在sql server中原来是datetime,然后迁移到mysql时你可以配置成timestamp;

        成功率很高;

缺点:迁移很慢!这是该方法最大的缺点,如果表的数据量达到几十万行,甚至几百万行,你会发现迁移起来真的很慢。明显比其他迁移方法慢很多。

2. 使用 powerdesigner 和 sql server 的脚本导出功能 来迁移

第一步:该方法首先使用 powerdesigner,对sql server数据库,进行逆向工程,得到E-R图,然后生成MySQL的建表语句。完成数据库结构的迁移;

           当然表结构的迁移,不使用powerdesigner一样也是可以的。比如我将表结构导出成语句,然后手动进行修改,然后在MySQL中运行,也是一样的;

第二部:然后使用 sql server的工具 SSMS,将sql server数据库中的表的数据,导出成insert语句,每个表对应导出一个文件,然后对文件进行一些处理,

           然后导入到MySQL数据库中。

具体的对 sql server 导出的sql文件的处理方法,参见:http://www.cnblogs.com/digdeep/p/4822499.html

3. 使用Oracle MySQL Server 官方的 workbeach 工具进行迁移

mysql官方有两篇 sql server 迁移到 mysql的指导手册,可以参考:

http://www.mysql.com/why-mysql/white-papers/guide-to-workbench-migration-wizard/

http://www.mysql.com/why-mysql/white-papers/guide-to-migrating-from-sql-server-to-mysql/

上面的连接中可以下载到pdf文件,安装文件的说明,使用 workbeach 工具就能进行迁移。因为 workbeach 有30天的使用期,所以完全不需要担心;

在workbench 连接sql server时,用户需要有 view any database 的权限。不然workbench无法访问sql server的表结构的元数据,从而无法进行迁移。

还有使用 Navicat 来进行迁移的方法,方法和 SQLyog 是类似的。

4. 三种方法比较

方法一只适合数据量小的迁移方法,如果数据量大,迁移时间短,基本是不适合的;

方法二是比较好的方法,缺点就是sql server导出的insert脚本中 datetime字段和decimal需要自己写代码进行转换,稍微有点麻烦;

第三种方法应该是最佳的选择,比较简单,速度也快,又不需要自己进行字段的处理。

所以对于数据量比较大的情况,应该选择方法三或者方法二。

5. 迁移需要注意的一些问题

sql server 在向 mysql 迁移时,需要注意的一些问题,在连接 http://www.mysql.com/why-mysql/white-papers/guide-to-migrating-from-sql-server-to-mysql/ 的文档中都有说明。下面是一些具体的注意事项:

1)唯一索引的不同,sql server的唯一索引的字段只能允许存在一个null值,而mysql,一直oracle中唯一索引对应的字段都允许存在多个null值;

2)ifnull 与 isnull ,sql server使用的是 ifnull,而mysql 中要使用 isnull:

update model_model set accuracy_num=ifnull(accuracy_num,0) + 1, accuracy_total=ifnull(accuracy_total,0) + #accuracyTotal:DECIMAL# where id=#id:BININT# and status=1

3)所有的分页sql都需要重写:

SQL server的分页(使用的是 row_number() over(......)):

用mysql重写:

4)存储过程的迁移是最麻烦的:

存储过程的语法存在很大的不同。

http://www.mysql.com/why-mysql/white-papers/guide-to-migrating-from-sql-server-to-mysql/ 的文档中有一些说明。

下面是一些mysql存储过程的参考文章:

http://www.cnblogs.com/digdeep/p/4818660.html

http://www.cnblogs.com/digdeep/p/4814020.html

 

你可能感兴趣的文章
Grails开发环境的高速搭建
查看>>
jQuery Ajax遍历表格,填充数据,将表格中的数据一条一条拼成Jason数组
查看>>
Redis为什么这么快
查看>>
js获取宽度设置thickbox百分比
查看>>
检测输入框字数的变化 注意onpropertychange oninput onchange onkeyup区别
查看>>
arm_GPIO_简单编程例题
查看>>
codves1282 约瑟夫问题 链表 会 T
查看>>
接口调用的跨域问题
查看>>
关于乌班图18.04安装mysql不提示设置密码解决方案
查看>>
php数据类型以及运算
查看>>
npm命令
查看>>
关于实现(大)系统的一些小体会
查看>>
如何使用github创建仓库并且与本地连接
查看>>
除法(简单枚举)
查看>>
System.Web.Caching
查看>>
linux常用命令 2
查看>>
jquery中prop和attr的区别
查看>>
2016-2017 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) Problem K Tournament Wins
查看>>
台州学院we are without brain 训练 计算几何
查看>>
Webpack 代码分离
查看>>