承接上两篇文章,本次来对比说明下在项目中,将SQL Server 数据库迁移至国产数据库时遇到的问题,以此来对比说明下那款国产数据库更适合承接SQL Server 数据库。
以下案例均在Windows 10系统下测试完成,目前这几款数据库均支持安装在Linux系统,由于本机电脑配置不是很高,虽然安装了虚拟机Linux系统,但是考虑到便捷性,所以先在本机系统测试了下。
案例一、达梦数据库
首先测试的是DM8,在安装前看了下官网介绍,达梦数据库兼容MySQL、SQL Server、Orcale等常见数据库,并且提供数据库迁移工具,这里特别提出表扬的是,达梦数据库迁移工具在迁移任务执行前,会自动匹配源数据库和目标数据库的兼容性,生成评估报告方便使用人员知晓本次迁移是否能够完美实现,若存在迁移问题的本部分,使用人员可根据报告反馈的问题和原因,调整迁移任务,或者调整源数据库。经过测试,本次迁移完美完成,达梦迁移工具自动识别并匹配完成表和字段的建立以及类型转换,需要注意的是,SQL Server 数据库中nvarchar(MAX)对应到达梦数据库中字段类型为text,而通过达梦数据库提供的驱动程序读取数据库时是不会将text类型转换成string类型的,需要自己通过代码转换,否则将报错类型不匹配,这点和SQL server数据库的驱动有所区别;
补充一下:如果使用了实体框架映射数据库的情况下,数据库迁移后,不想通过驱动程序+SQL语句来操作数据库,可使用达梦提供的方言包。
案例二、人大金仓数据库
接着测试的是KingbaseES(人大金仓通用型数据库),在安装前看了下官网介绍,KingbaseES数据库兼容MySQL、Orcale、PG数据库,并且提供数据库迁移工具,这里特别提醒人大金仓支持SQL Server数据库迁移至KingbaseES,但是并不能完美匹配兼容;主要是bit类型的转换问题;
1)基于MySQL安装的情况下,人大金仓对于bit类型数据保存格式为0x00,0x01分别代表bit的0,1,此时表中字段类型为bit,并且数据迁移工具在数据迁移时,并不能在创建SQL语句时,自动将0,1转换成0x00,0x01,导致数据迁移失败;
2)基于Orcale安装的情况下,人大金仓对于bit类型数据保存格式为b'0',b'1'分别代表bit的0,1,此时表中字段类型为pg_catalog.bit,并且数据迁移工具在数据迁移时,并不能在创建SQL语句时,自动将0,1转换成b'0',b'1',导致数据迁移失败(尤其需要注意的时存在使用默认值的情况下, SQL语句异常后将创建表失败);
3)基于PG安装的情况下,由于时间问题本次未能进行测试,不过通过上面两个测试案例可以看出,需要特别注意bit类型的使用;
补充一下:SQL Server数据库中的nvarchar类型将自动转换成text类型,另外如果使用了实体框架映射数据库的情况下,数据库迁移后,不想通过驱动程序+SQL语句来操作数据库,可使用KingbaseES提供的方言包。
案例二、虚谷数据库
最后测试的是虚谷数据库,在安装前看了下官网介绍,虚谷数据库兼容SQL Server、MySQL、Orcale、PG数据库,并且提供数据库迁移工具,这里特别提出表扬的是,虚谷数据库迁移工具在迁移任务执行前,会自动匹配源数据库和目标数据库的兼容性,生成评估报告方便使用人员知晓本次迁移是否能够完美实现,通过测试虚谷数据库迁移工具也可将SQL Server完美迁移至虚谷数据库。
补充一下:虚谷数据库并未提供任何语言实体框架的方言包,只能通过驱动程序+SQL语句来操作数据库,这一点对于使用了实体框架的用户来说十分不友好。
写在最后
特别注意下,无论使用那款国产数据库作为承接,均需好好研究下官网上的介绍,尤其是兼容那些数据库,字段类型,操作数据库的方式,以及是否提供实体框架方言包(目前大多项目开发均使用实体框架操作数据库),以及安装环境要求,价格等等。