从 SQL Server 迁移到 MySQL 要注意什么?

本文发布于 6 年前,部分内容可能已经失去参考价值。

本文基于使用 Navicat è¿›è¡Œæ•°æ®ä¼ è¾“:

image.png

配置源数据库和目标数据库:

image.png

切换到“高级”。如果是同类型数据库,会有“包含自动递增”选项,但是,从 SQL Server è¿ç§»åˆ° MySQL åˆ™æ²¡æœ‰ï¼š

image.pngimage.png

传输完成后,我们需要对目标数据库作以下调整:

迁移前(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'

image.png

可以先禁用外键检查再设置自增:

set foreign_key_checks = 0;
ALTER TABLE `<table>` MODIFY COLUMN `id` int(11) NOT NULL AUTO_INCREMENT FIRST;

执行完后,foreign_key_checks ä¼šè‡ªåŠ¨æ¢å¤ä¸º 1。

xoyozo 6 年前
转载请注明出处
云服务器 精选特惠
可能相关的内容