程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> mysql數據導入sqlserver數據庫方法

mysql數據導入sqlserver數據庫方法

編輯:關於MYSQL數據庫

       方法一:通過在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類型。

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

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

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved