mysql数据库迁移到sqlserver问题解决

时间:2024-03-31 21:44:00

背景:
更换数据库,需要将Mysql数据库数据迁移到Sqlserver数据库中.
工具:
推荐使用Navicat,因为很多步骤可以图形化,相对简便
mysql数据库迁移到sqlserver问题解决

迁移过程:

  1. 检查Mysql的数据库,确保是完整一套数据库,如图所示,该数据库中包含了MES系统用的所有数据库

  2. mysql数据库迁移到sqlserver问题解决

  3. Navicat连接SQLSERVER(服务器上已部署数据库,默认使用SQLSERVER验证登录,如图:
    4mysql数据库迁移到sqlserver问题解决

注意:如果一直连不上,需要到本地SQLSERVER里修改密码策略,或者强制修改密码,重新登录
5. 在sqlserver下新建数据库,可以在本地服务器sqlserver管理器使用数据库语句新建或者使用navicat新建,新建的数据库名须与Mysql下的数据库名保持一致。如图:
mysql数据库迁移到sqlserver问题解决
4.Navicat打开工具选择数据传输,如图:

mysql数据库迁移到sqlserver问题解决
5.在数据传输界面,左面是传输源,右面为传输目标,设置完后,点击开始,如图:
mysql数据库迁移到sqlserver问题解决

这里我们要注意选择的数据库名两边一般是保持一致的,数据库对象可以勾选必要的表传输,在目标里模式一定要选择dbo,这样表会被迁移到dbo下,否则在后期开发和测试中 数据库不容易连接或者会查询报错,错误:”xx字段无效”

6.顺利的话我们可以在sqlserver中看到我们迁移的表数据,如图

重点讲下这两天在库迁移过程中遇到的问题和解决方法:
迁移数据遇到错误时,一定要先备份报错的数据表,在备份的数据表上分析和解决问题。
a. 带索引迁移问题
表里如果带索引的话,传输时会报索引错误,可以将索引先去除(在备份的数据里),然后传到SQLserver,在sqlserver里将索引添加进去,表多的话,步骤比较繁琐,需要耐心去做。
b. 从字符串转换日期和/或时间时,转换失败问题

在遇到表里有时间的字段的数据迁移时,报这个错频率非常高,尝试很多方法无法解决,后来MYSQL上对这个错误表数据进行分析,将其简化为一条数据,如图,写一条插入语句到sqlserver,如下:INSERT INTO [mes_device_check_bom_relation] ([directory_id], [content_id], [data_center_id], [create_date], [update_date]) VALUES (N’6’, N’188’, null, 2019-03-13 09:49:09, 0000-00-00 00:00:00),同样报这个错误,将0000-00-00 00:00:00删除,再插入,插入成功。最后发现是数据扥问题,也就是说mysql可以识别0000-00-00 00:00:00的这个时间数据而sqlserver无法识别,所以会报错。因为不是合法有效的数据,只要将其改为合法数据即可解决。

c. Source data type [bit] not supported 错误
在迁移license数据库时报的这个错误,这个是布尔类型,在迁移时Sqlserver不支持该类型,需在原表改为其他类型后传输,待传输结束后,在Sqlserver里改为bit类型。值得注意的是,在sqlserver里 只认0,1,作为布尔值,如果mysql使用其他值作为布尔值得话,在后期测试中sqlserver应该会报错或者判断错误。
d. 索引重复问题
在sqlserver上添加索引会报索引重复,要检查下数据,是否有索引字段是否有NULL和重复项,有则需要改正重新添加索引