视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mysql数据导入sqlserver数据库方法_MySQL
2020-11-09 18:48:17 责编:小采
文档


bitsCN.com

mysql数据导入sqlserver数据库方法

方法一:通过在mysql中备份sql来将mysql数据导入sqlserver。适合于数据量不大的情况使用(如何你的数据中存在的blob字段的数据量不是很多或者不存在可以考虑)。

特点:对于小数据量的迁移:方便快捷。

步骤:1:使用mysql工具备份sql文件,我这里用的是SQLyog软件。

2:对备份的sql文件进行处理(原因是这些备份的sql文件可以在sqlserver解析器中不能通过需要进行写修改)。此处以SQLyog举例:

 /*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;/*Data for the table `t_standard_check_unit` */insert into `t_standard_check_unit`(`SYSTEM_ID`,`UNIT_TYPE_1`,`UNIT_TYPE_2`,`UNIT_TYPE_3`,`UNIT_TYPE_4`,`UNIT_TYPE_5`,`UNIT_TYPE_6`) values ('01',9,7,6,8,4,NULL),('02',9,8,6,5,4,NULL),('03',9,8,5,6,4,NULL),('04',9,8,5,6,4,NULL),('05',9,8,6,5,4,NULL),('06',9,8,5,6,4,NULL),('07',9,9,9,8,4,NULL),('08',9,8,6,5,4,NULL),('09',9,9,9,8,4,NULL);/*Data for the table `t_standard_system` */

上面是备份的sql文件中的部分:

注意:a:其中insert into `t_standard_check_unit`(`SYSTEM_ID`,`UNIT_TYPE_1`,`UNIT_TYPE_2`,`UNIT_TYPE_3`,`UNIT_TYPE_4`,`UNIT_TYPE_5`,`UNIT_TYPE_6`)这一段中的引号在sqlserver中不能支持所以得通过程序处理掉。

处理程序:

public void switchSqlFile(File file) throws IOException{ BufferedReader bReader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"utf-8")); String filePathOld = file.getAbsolutePath(); String filePath = filePathOld.substring(0,filePathOld.indexOf(".")) + "_switchFile" + filePathOld.substring(filePathOld.indexOf(".")); BufferedWriter bWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(filePath)),"utf-8")); String str = ""; while((str =bReader.readLine()) !=null){ if(str.contains("CREATE DATABASE")) continue; if(str.contains("USE `q9`")) continue; if(str.toLowerCase().contains(") values(") || str.toLowerCase().contains(") values (")|| str.toLowerCase().contains(")values(")||str.toLowerCase().contains(")values (")){ String ss = str.substring(0,str.toLowerCase().indexOf("values (")); str = ss.substring(0,ss.indexOf("(")).replaceAll("`", "") + str.substring(str.toLowerCase().indexOf(" values (")); } str +="/r/n"; bWriter.write(str); } bReader.close(); bWriter.close(); }

此部分程序不是很智能,此处只举个例子。

b:这里是通过将一个表的数据导出为一行,这样导出恢复速度快,(sql优化问题),但是注意:当表中的数据行数超过1K时在sql脚本解析中是通不过的,此时应该选择一条记录一行insert语句的形式。(补充点知识:当一行过长时文本编辑器打开的速度会很慢,所以第二种方式也方便在文本编辑器中查看。)

3:利用处理后的sql导入sqlserver数据库。

方法1:直接打开sql文件通过在sqlserver中执行导入。

总结的小知识:

mysql向sqlserver2008兼容

一:脚本兼容问题

1:sqlserver不支持在外键约束中加on delete restrict on update restrict。

2:sqlserver2008不支持drop table if exists XXX。

3:sqlserver2008不支持blob类型,需要改成image或者text类型。

注意,建立数据库时最好用修改的方式添加约束,这样在进行数据库恢复时可以先不建立约束,可以免去约束带来的麻烦和效率问题。

最好将约束整理到最下面。及采用表及约束而不是列及约束。

bitsCN.com

下载本文
显示全文
专题