SQL SERVER 到 MYSQL 迁移存储过程代码改写详细对照表
2011-09-16 18:48
344 查看
这次面临服务器对不同操作系统迁移,我全力支持迁移工作。
一直做c++游戏服务端,对类似规模迁移全然没实战经验,踏错一步就是万丈深渊。程序代码的迁移比较有信心,数据库感觉有点烦银。经过一两周折腾,小心翼翼把“数据库全功能”成功导入了mysql(5.1.40),并且把程序底层调用接口相应改好。测试顺利通过,长呼一口气擦擦汗吧。这次迁移最头疼的存储过程的批量迁移,收集资料总结两个数据库的存储过程语法的差异,反复修改迁移脚本,终于成功了。
转结构、数据都可以用工具比较完美的迁移,没有找到工具可以完美转移存储过程,由于存储过程量较大,所以选择手动写脚本工具!可是并不顺利,不兼容的语法把写工具的工作变得复杂。
这次回忆下碰到比较多的不兼容语法,基本找到等效的替代办法,记性不好写出来方便以后查看
弄好后“mysqldump -uXXX -pXXX --default-character-set=utf8 --opt --extended-insert=false --skip-triggers -R -d -x dbo > /data/dbo.sql”备份一下,不带数据的,带数据去掉“-d”
还原"mysql --default-character-set=utf8 -uXXX -pXXX -f dbo < /data/dbo.sql" , 出现“Unknown character set: 'gbk'”类似的错误,说明缺字符集,或者你能保证数据是utf8,就搜一下sql文件注释(没错就在注释)里的gbk替换成utf8就行了
一直做c++游戏服务端,对类似规模迁移全然没实战经验,踏错一步就是万丈深渊。程序代码的迁移比较有信心,数据库感觉有点烦银。经过一两周折腾,小心翼翼把“数据库全功能”成功导入了mysql(5.1.40),并且把程序底层调用接口相应改好。测试顺利通过,长呼一口气擦擦汗吧。这次迁移最头疼的存储过程的批量迁移,收集资料总结两个数据库的存储过程语法的差异,反复修改迁移脚本,终于成功了。
转结构、数据都可以用工具比较完美的迁移,没有找到工具可以完美转移存储过程,由于存储过程量较大,所以选择手动写脚本工具!可是并不顺利,不兼容的语法把写工具的工作变得复杂。
这次回忆下碰到比较多的不兼容语法,基本找到等效的替代办法,记性不好写出来方便以后查看
SQLSERVER | MYSQL |
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON | #可以无视 |
GO | #可以无视 |
句末加分号 | |
ALTER PROCEDURE [dbo].[XXX] | CREATE PROCEDURE `XX`.`XXX` |
@A INT, @B INT OUTPUT, @C VARCHAR(255), @D DATETIME, @E DECIMAL(8,2), @F BIT, @G FLOAT, ... | IN A INT, OUT B INT, IN C VARCHAR(255)/*OR TEXT*/, IN D DATETIME IN E DECIMAL(8,2), IN F BOOL, IN G FLOAT, ... |
放到as以后declare _date TYPE | 放到begin以后declare _date TYPE; |
RETURN X | #有的情况可以直接输出。 #最好加一个out X做返回值,不过程序那边得改动底层接口 |
RETURN ; | ABC:BEGIN ... LEAVE ABC; ... END |
SELECT @X = A FROM XXX WHERE B = NULL | SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; SELECT A FROM XXX WHERE B = NULL INTO @X; |
IF condition BEGIN ... END ELSE IF condition BEGIN ... END ELSE BEGIN ... END | IF (condition) THEN ... ELSEIF (condition) #不能有空格 THEN ... ELSE ... END IF; |
@@ROWCOUNT | ROW_COUNT() #写 FOUND_ROWS() #读 |
datediff | #参数不一样,且需要转成时间串。 #具体google一下datediff sqlserver和datediff mysql datediff |
delete `XXX` | TRUNCATE TABLE `XXX`;#为了删除数据,不完全等效,用TRUNCATE重置了整个表,比如自增量 |
DBCC CHECKIDENT (`XXX`,reseed,1) | ALTER TABLE `XXX` AUTO_INCREMENT =1 ROW_FORMAT = COMPACT; |
-- | # -- |
... | ... #这里不是省略 |
还原"mysql --default-character-set=utf8 -uXXX -pXXX -f dbo < /data/dbo.sql" , 出现“Unknown character set: 'gbk'”类似的错误,说明缺字符集,或者你能保证数据是utf8,就搜一下sql文件注释(没错就在注释)里的gbk替换成utf8就行了
相关文章推荐
- SQL server 错误代码对照表
- sql server部分主要代码
- java可以使用计算日期的天数差,以下是详细代码:{转自百度知道....}
- 改写《魔塔》中篇02:重构代码之分离游戏地图类
- SQL Server口令密码对照表
- 我是如何快速拿下datacastle图像识别竞赛“猫狗大战”冠军的 | 含全代码和详细说明
- 压缩跟踪(CT)代码详细学习_模块2(特征的提取和计算)
- Sql Server查询表的详细信息
- 关于JMeter的CSV Data Set Config的源码改写(包括了部分界面等代码的分析)
- 在存储过程中编写正确的事务处理代码(SQL Server 2000 & 2005)
- Java实现链表结构的详细代码
- java使用xfire与spring创建webservice,详细描述示例代码
- jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
- [置顶] Android开发之将Edittext输入弹出的软键盘设置搜索确定键。详细代码,已验证可用。
- 查看、修改Xcode自带快捷代码块快捷键,及Xcode自带swift常用快捷代码块对照表
- Access与Sql Server之ASP代码比较
- 中国国家气象局天气预报信息接口代码引用详细说明与教程
- aspx页面弹出窗口代码详细介绍
- Python 1行代码实现文本分类(实战笔记),含代码详细说明及运行结果
- 在存储过程中编写正确的事务处理代码(SQL Server 2000 & 2005)