sqlserver迁移到mysql 在数据库方面的工作主要是表的迁移,以及存储过程的迁移,这里主要做的是表的迁移. 首先先将MSSQL Server表结构导出为.sql文件. 表迁移,mysql一律不能运行带有[,],dbo.等带有sqlserver特征的脚本, 所以在导出的sqlserver脚步里面,首先要把这些字符全部过滤掉(可使用editplus进行过滤),在表创建方面的不支持的字符如下:[,],[dbo].,GO, on primary,. 在过滤完以上的字符后, 由于导出的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 ) CREATE TABLE BookStaticSortStatus ( sid int NOT NULL , sortStatus int NOT NULL , mxReviewStatus int NOT NULL , lReviewStatus int NOT NULL , up_date datetime NOT NULL ) 改动后是这样的: CREATE TABLE bmapnamebidsg ( bword nvarchar (100) NOT NULL , bids text NULL , status int NOT NULL , cr_date datetime NOT NULL )ENGINE=InnoDB ; 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 ; 接下来就是数据类型了! 在数据类型方面,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提供事务支持已经外部键等高级数据库功能。
|