您好,欢迎访问一九零五行业门户网

mysql数据导入sqlserver数据库方法

方法一:通过在mysql中备份sql来将mysql数据导入sqlserver。适合于数据量不大的情况使用(如何你的数据中存在的blob字段的数据量不是很多或者不存在可以考虑)。 特点:对于小数据量的迁移:方便快捷。 步骤:1:使用mysql工具备份sql文件,我这里用的是sqlyog
方法一:通过在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 +=rn;
bwriter.write(str);
}
breader.close();
bwriter.close();
}
此部分程序不是很智能,此处只举个例子。
b:这里是通过将一个表的数据导出为一行,,这样导出恢复速度快,(sql优化问题),但是注意:当表中的数据行数超过1k时在sql脚本解析中是通不过的,此时应该选择一条记录一行insert语句的形式。(补充点知识:当一行过长时文本编辑器打开的速度会很慢,所以第二种方式也方便在文本编辑器中查看。)
3:利用处理后的sql导入sqlserver数据库。
方法1:直接打开sql文件通过在sqlserver中执行导入。
方法2:利用sqlcmd命令导入sql文件,功能同mysql中的source,具体使用参考上一篇文章。
方法二:通过odbc桥接器来完成数据迁移:
待续。。。。。。。。。。。。。。。。。。。。。。。
总结的小知识:
mysql向sqlserver2008兼容
一:脚本兼容问题
1:sqlserver不支持在外键约束中加on delete restrict on update restrict。
2:sqlserver2008不支持drop table if exists xxx。
3:sqlserver2008不支持blob类型,需要改成image或者text类型。
注意,建立数据库时最好用修改的方式添加约束,这样在进行数据库恢复时可以先不建立约束,可以免去约束带来的麻烦和效率问题。
最好将约束整理到最下面。及采用表及约束而不是列及约束。
其它类似信息

推荐信息