Laravel 10连接SQL Server Express迁移失败问题求助
Laravel 10 连接SQL Server迁移报错排查方案
一、解决「TCP Provider: 由于目标计算机积极拒绝,无法连接」错误
- 启用SQL Server TCP/IP协议:打开SQL Server配置管理器,依次展开「SQL Server网络配置」→「[你的SQL Server实例名]的协议」,确保「TCP/IP」处于启用状态,之后重启SQL Server服务。
- 核对端口配置:在TCP/IP的属性窗口切换到「IP地址」标签,找到「IPAll」下的「TCP端口」,确认该端口与
.env文件中的DB_PORT一致(默认1433)。如果使用动态端口,需查看SQL Server错误日志获取实际使用的端口。 - 测试网络连通性:用命令行工具验证端口是否开放:
- Windows:
telnet 你的DB_HOST 你的DB_PORT或 PowerShell执行Test-NetConnection 你的DB_HOST -Port 你的DB_PORT - 如果不通,检查Windows防火墙是否开放对应端口,可临时关闭防火墙测试是否是防火墙拦截。
- Windows:
- 确认SQL Server身份验证模式:确保SQL Server设置为混合模式身份验证(Windows+SQL Server身份验证),且
.env中的DB_USERNAME是SQL Server本地账号(而非Windows域账号),密码正确。 - 验证PHP驱动加载:
- 确认安装的ODBC Driver 17 for SQL Server与PHP版本(x86/x64)匹配。
- 打开php.ini文件,确保已添加
extension=pdo_sqlsrv和extension=sqlsrv(去掉前面的分号注释),重启Apache/Nginx后,执行php -m命令查看是否加载了pdo_sqlsrv和sqlsrv扩展。
二、解决「Nothing to Migrate」问题
- 检查迁移文件:确认
database/migrations目录下存在未执行的迁移文件,且文件名符合Laravel规范(格式为YYYY_MM_DD_HHMMSS_xxx.php)。 - 查看迁移状态:执行
php artisan migrate:status命令,查看哪些迁移已被标记为执行。如果存在已记录但实际表被删除的情况,可手动删除migrations表中对应记录,或执行php artisan migrate:fresh重置数据库(注意:此命令会清空所有数据)。 - 指定数据库连接:如果项目配置了多个数据库连接,执行迁移时需明确指定SQL Server连接:
php artisan migrate --database=sqlsrv - 检查迁移文件语法:排查迁移文件中的
up()和down()方法是否存在语法错误(如拼写错误、缺少分号、语法不规范等),错误的语法会导致迁移文件无法被系统识别。
内容的提问来源于stack exchange,提问作者Brian James Abellar
相关产品推荐
相关产品推荐

