gorm v2连接sql server必须使用gorm.io/driver/sqlserver驱动和sqlserver://用户:密码@ip:端口?database=库名格式dsn,禁用windows身份验证,且需启用tcp/ip协议、开放端口并确保sa账号可用。

直接用 gorm.io/driver/sqlserver 驱动 + 正确 DSN 格式就能连,但多数连不上是因为 DSN 写错、端口未开放或 SQL Server 未启用 TCP/IP 协议。
DSN 必须用 sqlserver:// 用户名:密码@IP:端口?database=库名 格式
SQL Server 的 DSN 和 MySQL/PostgreSQL 完全不同,不能套用 user:pass@tcp(...) 模式。GORM V2 的 sqlserver 驱动只认 sqlserver:// 前缀:
-
sqlserver://sa:123456@192.168.1.100:1433?database=testdb✅ 正确 -
server=...;user id=...;password=...❌ 这是旧版github.com/jinzhu/gorm+mssql驱动的写法,GORM V2 不识别 - 漏掉
database=xxx参数会导致连接成功但后续查询报Invalid object name 'xxx' - 如果实例用了命名实例(如
SQLExpress),不能写:1433,得用instance=SQLExpress形式,例如:sqlserver://sa:123456@192.168.1.100?database=testdb&instance=SQLExpress
驱动安装和导入必须匹配 GORM V2
用错驱动版本是新手最常踩的坑——V1 和 V2 的 import 路径、Open 方式、DSN 解析逻辑全都不兼容:
- 装驱动:执行
go get -u gorm.io/driver/sqlserver,不是github.com/jinzhu/gorm/dialects/mssql - 导入包:
import "gorm.io/driver/sqlserver",不是_ "github.com/jinzhu/gorm/dialects/mssql" - 初始化 DB:
gorm.Open(sqlserver.Open(dsn), &gorm.Config{}),不是gorm.Open("mssql", dsn) - 如果项目里还残留 V1 的
github.com/jinzhu/gorm,会引发类型冲突或静默失败
SQL Server 实例必须允许远程连接和 TCP/IP
代码写对了但 failed to connect database 或超时,大概率是服务端配置问题:
- SQL Server Configuration Manager → SQL Server Network Configuration → Protocols for [实例名] → 确保
TCP/IP是 Enabled - 右键 TCP/IP → Properties → IP Addresses 标签页 → 找到
IPAll区域 → 清空TCP Dynamic Ports,填入TCP Port(通常是1433) - Windows 防火墙要放行对应端口,或临时关闭测试
- SQL Server Management Studio 登录时选 “SQL Server 身份验证”,确认
sa账号已启用且密码正确(默认可能禁用)
真正容易被忽略的是:GORM V2 的 sqlserver 驱动不支持 Windows 身份验证(Integrated Security),只支持 SQL Server 身份验证;另外,database 参数必须存在,哪怕你之后用 db.Exec("USE xxx") 切库,初始连接也得指定库名,否则会连到 master 导致表找不到。











