数据库迁移(sqlserver至mysql)
最近项目在做一个大迁移,项目从dobbo项目迁至成springcloud项目,同时内部也有一个很大的转变,从架构开始一整个的转型,而我目前负责的是一个数据库的转型。
就如标题所说,sqlserver转至成mysql。其实sql的转变区别不大,更何况是sqlserver和mysql,他们的相似度大约有80%了吧。可是毕竟是个大项目,怎么可能只有那些普通的sql语句呢是吧。
那么所说一下目前存在的几个需要改动的地方:
其一:一个很简单的语句,专业术语喜欢叫做分页,懂了吧
在sqlserver里面是写在 select from 之中的。比如 查询 A表所有
select * from A,那么只要取前面几个的话就是 select top 1 * from A ,取第一个
而在mysql中它却不是这样的,它的关键字是limit,同样
select * from A limit 1
这两句效果一样但是语句不一样,这就是一个小改变。
其二:里面的函数库,虽然说函数库基本都是一样的(目前我没看到两个有不同的函数库哈),但是呢函数库一样语法可就不一样啦。说一下一对双胞胎?cast和Convert,首先说cast
cast在sqlserver中它可以作为
cast('值' , "数据类型")
或者
cast('值' as "数据类型")
但是在mysql中它只有一个语法那就是 cast('值' as "数据类型")
下面说到另一个Convert,刚刚是不是提到双胞胎了,对,它的作用和cast很相似,也是替换类型的,或者说类型转换
Convert在sqlserver中和在mysql中差距有一点大的样子,首先sqlserver可以使用varchar类型,但是在mysql中varchar是会报错的,它只能存在char类型,别看varchar和char类型都一样是字符类型,但是varchar它中文也算一个占位,英文也算一个占位,而char可不一样,char的中文算两个,空间完全不一样了。
而且我发现,它的语法还有一些问题比如sqlserver中是 Convert(varchar(100),'字段',120),而mysql却是 Convert('字段',char(100)),语法这样来说还是有些差距的。
以上是我目前遇到的一些问题,之后会继续转变,如果有一些新的我会继续更新出来,敬请期待。