sql server 遷移到 mysql

sqlserver遷移到mysql  在數據庫方面的工做主要是表的遷移,以及存儲過程的遷移,這裏主要作的是表的遷移.mysql

首先先將MSSQL Server表結構導出爲.sql文件. 表遷移,mysql一概不能運行帶有[,],dbo.等帶有sqlserver特徵的腳本, 因此在導出的sqlserver腳步裏面,首先要把這些字符所有過濾掉(可以使用editplus進行過濾),在表建立方面的不支持的字符以下:[,],[dbo].,GO, on primary,.sql

在過濾完以上的字符後, 因爲導出的sql文件都包含多個表, 爲了可以一次性裝載完全部的scripts並運行,須要在每一個表的create語句後面加上分號, (同時還有加上ENGINE=InnoDB),不然你會發現只能一個一個表的進行運行,好比原來是這樣:數據庫

CREATE TABLE bmapnamebidsg (
 bword nvarchar (100)  NOT NULL ,
 bids text  NULL ,
 status int NOT NULL ,
 cr_date datetime NOT NULL 
)ide

CREATE TABLE BookStaticSortStatus (
 sid int NOT NULL ,
 sortStatus int NOT NULL ,
 mxReviewStatus int NOT NULL ,
 lReviewStatus int NOT NULL ,
 up_date datetime NOT NULL 
)sqlserver

改動後是這樣的:性能

CREATE TABLE bmapnamebidsg (
 bword nvarchar (100)  NOT NULL ,
 bids text  NULL ,
 status int NOT NULL ,
 cr_date datetime NOT NULL
)ENGINE=InnoDB ;spa

CREATE TABLE BookStaticSortStatus (
 sid int NOT NULL ,
 sortStatus int NOT NULL ,
 mxReviewStatus int NOT NULL ,
 lReviewStatus int NOT NULL ,
 up_date datetime NOT NULL
)ENGINE=InnoDB ;.net

接下來就是數據類型了!server

在數據類型方面,mysql基本對應了sqlserver的數據類型,像bit,text,varchar,等,都對應得比較好,可是,mysql並不支持smalldatetime(這個是sqlserver特有的),須要轉成datetime,另外,sqlserver中的identity自增加屬性在mysql中則表現爲auto_increament屬性,而且聲明該屬性的列必須是key!索引

最後是主鍵,索引以及缺省值如何對應,一些是MS SQLServer(建一個主鍵,爲兩個字段定義缺省值,再爲一個字段定義成索引):

ALTER TABLE BookStaticSortStatus WITH NOCHECK ADD
 CONSTRAINT PK_BookStaticSortStatus PRIMARY KEY  CLUSTERED
 (
  sid
 )
ALTER TABLE BookStaticSortStatus ADD

CONSTRAINT DF_BookStaticSortStatus_status DEFAULT ((-1)) FOR sortStatus,
CONSTRAINT DF_BookStaticSortStatus_up_date DEFAULT (getdate()) FOR up_date
CREATE  INDEX [sort2_books] ON [dbo].[books]([s2id]) ON [PRIMARY]

MySQL:

CREATE TABLE `bmapnamebidsg` (
  `bword` varchar(100) character set utf8 NOT NULL default '1',
  `bids` text NOT NULL,
  `status` int(11) NOT NULL,
  `cr_date` datetime NOT NULL,
  PRIMARY KEY  (`bword`),
  KEY `bids` (`bids`(1))
) ENGINE=InnoDB DEFAULT CHARSET=latin1

補充:ENGINE=InnoDB的問題 
    mysql數據庫有兩套數據
存儲引擎,分別是MYISAM和INNODB,其中MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持。MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,可是不提供事務支持,而InnoDB提供事務支持已經外部鍵等高級數據庫功能。

相關文章
相關標籤/搜索