萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql數據導入sqlserver數據庫方法

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 +="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類型。

  注意,建立數據庫時最好用修改的方式添加約束,這樣在進行數據庫恢復時可以先不建立約束,可以免去約束帶來的麻煩和效率問題。

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

copyright © 萬盛學電腦網 all rights reserved