从 SQL Server 迁移到 MySQL 要注意什么?
本文发布于 7 年前,部分内容可能已经失去参考价值。
本文基于使用 Navicat 进行数据传输:
配置源数据库和目标数据库:
切换到“高级”。如果是同类型数据库,会有“包含自动递增”选项,但是,从 SQL Server 迁移到 MySQL 则没有:
传输完成后,我们需要对目标数据库作以下调整:
迁移前(SQL Server) | 迁移后(MySQL) | 如何调整 |
表名可能有大小写 | 全部变成小写(默认) | 建议单词间以下划线(_)分隔,并修改程序代码 |
主键标识(是) | 自动递增(否) | 迁移会保留主键、外键、索引等,但会丢失自动递增。检查每个表,按需设置(遇到外键可以先删除外键再添加,若外键较多,推荐用 SQL 查询的方式,见下文) |
bit | tinyint(4) | 改为 tinyint(1) 表示布尔型 |
tinyint | tinyint(4) | 原为无符号[0,255],现为有符号[-127,128],在设计表定位到该字段,底下勾选“无符号” |
nvarchar(n) | varchar(n) 或 text | 会根据原长度转为不同类型,需根据实际情况调整 |
nvarchar(MAX) | longtext | 视实际情况调整 |
smalldatetime | datetime | MySQL 没有精度为“分钟”的时间类型,需根据实际情况调整程序代码 |
float | double | 精度变高了,视情况调整 |
money | decimal(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 `<table>` MODIFY COLUMN `id` int(11) NOT NULL AUTO_INCREMENT FIRST;
执行完后,foreign_key_checks 会自动恢复为 1。
可能相关的内容