本文基于使用 Navicat 进行数据传输:
配置源数据库和目标数据库:
切换到“高级”。如果是同类型数据库,会有“包含自动递增”选项,但是,从 SQL Server 迁移到 MySQL 则没有:
传输完成后,我们需要对目标数据库作以下调整:迁移前(SQL Server)迁移后(MySQL)如何调整表名可能有大小写全部变成小写(默认)建议单词间以下划线(_)分隔,并修改程序代码
主键标识(是)自动递增(否)迁移会保留主键、外键、索引等,但会丢失自动递增。检查每个表,按需设置(遇到外键可以先删除外键再添加,若外键较多,推荐用 SQL 查询的方式,见下文)
bittinyint(4)改为 tinyint(1) 表示布尔型
tinyinttinyint(4)原为无符号[0,255],现为有符号[-127,128],在设计表定位到该字段,底下勾选“无符号”
nvarchar(n)varchar(n) 或 text会根据原长度转为不同类型,需根据实际情况调整
nvarchar(MAX)longtext视实际情况调整
smalldatetimedatetimeMySQL 没有精度为“分钟”的时间类型,需根据实际情况调整程序代码
floatdouble精度变高了,视情况调整
moneydecimal(19,4)无需调整
其它我没有使用到的字段类型暂未列出。
MySQL 中将用于外键约束的主键设置为自动递增
当主键用于其它表的外键约束时,我们无法更改该主键:
1833 - Cannot change column 'id': used in a foreign key constraint 'FK_xxx' of table 'xxx'
可以先禁用外键检查再设置自增:set foreign_key_checks = 0;
ALTER TABLE `
执行完后,foreign_key_checks 会自动恢复为 1。
谢谢赞赏 ♥