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提供事务支持已经外部键等高级数据库功能。

相关文章
相关标签/搜索