You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将使用MS SQL Server的Laravel项目迁移至MySQL数据库

整体操作复杂度为低到中等,核心取决于你的项目是否大量使用了SQL Server专属的语法、存储过程、自定义函数:如果项目绝大多数查询都是用Laravel Eloquent ORM或Schema门面实现的,没有手写太多MSSQL原生SQL,全程操作可在1天内完成;如果有大量MSSQL专属逻辑,需要额外花时间做语法适配。

自动化迁移可选方案
  • 方案1:基于Laravel自身的迁移体系实现,完全适配Laravel项目逻辑,无需额外第三方数据库工具
  • 方案2:使用数据库结构/数据同步工具实现,适合没有写过Laravel迁移文件、表量较大的项目
具体操作步骤
  • 前置操作:先做全量备份,导出MSSQL完整数据库备份包,同时备份整个Laravel项目代码,避免操作失误丢失数据
    1. 配置MySQL连接
      首先确保服务器已经安装开启pdo_mysql扩展,修改项目根目录.env文件的数据库配置:
      把DB_CONNECTION=sqlsrv改为DB_CONNECTION=mysql,然后补全MySQL对应的DB_HOST/DB_PORT/DB_DATABASE/DB_USERNAME/DB_PASSWORD配置项,再检查config/database.php中mysql连接的默认配置,确保字符集为utf8mb4、排序规则为utf8mb4_unicode_ci即可。
    1. 迁移表结构
      如果你的项目已经有完整的Laravel迁移文件,且没有使用MSSQL专属的字段方法(比如->ntext()),直接执行php artisan migrate即可自动在MySQL中生成全部表结构。
      如果你没有现成的迁移文件,可以先使用migrate:generate扩展包从现有MSSQL库反向生成迁移文件,再将其中MSSQL专属的字段类型替换为MySQL对应类型(比如nvarchar改varchar、datetime2改datetime、bit改tinyint(1)),再执行迁移命令即可。
    1. 自动化迁移数据
      可选两种自动化方式:
    • 方式1:写临时数据同步脚本,同时连接MSSQL和MySQL两个数据库,按表批量读取MSSQL数据写入MySQL,自动处理字段类型转换、主键自增同步,适合数据量不大的项目
    • 方式2:使用数据库转换工具直接做全量数据同步,同步完成后手动校验各表行数、抽样核对字段值,确保没有数据丢失、乱码、格式错误的问题
    1. 适配业务代码
      全局搜索项目中所有手写的原生SQL语句,替换MSSQL专属语法:
    • 分页语法TOP N改为LIMIT N
    • 空值判断函数ISNULL()改为IFNULL()
    • 字符串拼接用的+运算符改为CONCAT()函数
      其余用Eloquent ORM实现的查询无需修改,Laravel会自动适配MySQL的语法规则。
    1. 全量验证测试
      先执行php artisan config:clear清空配置缓存,再跑完全部业务流程测试:包含增删改查、关联查询、文件上传、统计接口等核心逻辑,确认没有报错、数据展示正常即可。
常见坑点注意
  • MySQL在Linux环境下默认表名、字段名区分大小写,而MSSQL默认不区分,要是你的业务代码里有大小写不一致的写法,可以统一修正,或者将MySQL的lower_case_table_names参数设为1避免大小写问题
  • 迁移完数据后要核对所有自增主键的当前值,确保和表内最大主键值一致,避免后续插入数据报主键冲突错误
  • 日期类型字段迁移时注意格式转换,避免出现0000-00-00这类无效日期值

内容的提问来源于stack exchange,提问作者user940959

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:54:03