Go-MSSQLDB 连接字符串

驱动程序go-mssqldb支持三种 连接字符串 格式:URL、ADO 和 ODBC。 这三种格式都支持相同的连接参数。 选择最适合你应用或部署模式的格式。

Tip

新的围棋应用使用URL格式。 它与 Go net/url 的软件包集成,实现了安全的编码和程序化构建。 从.NET应用程序移植连接字符串时使用ADO格式;当包含分号或其他特殊字符的值转义更方便时,使用ODBC格式。

URL 格式

URL 格式遵循该 sqlserver:// 方案,是 Go 应用中最常见的格式:

sqlserver://username:password@host:port?database=AdventureWorks2025&param=value

示例

通过SQL认证连接到本地默认实例:

sqlserver://<user>:<password>@<server>?database=AdventureWorks2025

连接到命名实例:

sqlserver://<user>:<password>@<server>/myinstance?database=AdventureWorks2025

连接 Azure SQL 数据库:

sqlserver://<user>:<password>@<server>.database.windows.net?database=AdventureWorks2025&encrypt=true&TrustServerCertificate=false

使用 Windows 身份验证(仅限 Windows):

sqlserver://<server>?database=AdventureWorks2025&trusted_connection=yes

注释

在URL格式中,端口默认为1433。 要指定不同的端口,请在主机 sqlserver://<server>:1434?database=AdventureWorks2025后面加。

密码中的特殊字符

在URL格式中,带有特殊字符的密码必须采用百分点编码。 需要编码的常见字符:

字符 Encoded 示例密码 编码形式
@ %40 p@ssword p%40ssword
: %3A p:ssword p%3Assword
/ %2F p/ssword p%2Fssword
# %23 p#ssword p%23ssword
% %25 p%ssword p%25ssword

用于 url.UserPassword() 自动处理编码:

u := &url.URL{
    Scheme: "sqlserver",
    User:   url.UserPassword("<user>", "p@ss:word#1"),
    Host:   "<server>:1433",
}
u.RawQuery = url.Values{"database": {"AdventureWorks2025"}}.Encode()
// Result: sqlserver://<user>:p%40ss%3Aword%231@<server>:1433?database=AdventureWorks2025

在ADO格式中,不需要百分比编码。 如果某个值包含分号,则用双引号 password="<password>"包裹:。 在ODBC格式中,将值包裹为: password={<password>}

ADO格式

ADO格式使用分 key=value 号分隔的对:

server=<server>;user id=<user>;password=<password>;database=AdventureWorks2025

ADO示例

连接端口号:

server=<server>;port=1434;user id=<user>;password=<password>;database=AdventureWorks2025

连接到命名实例:

server=<server>\myinstance;user id=<user>;password=<password>;database=AdventureWorks2025

注释

在ADO格式中, serverport 字段是独立的参数。 不要把结肠分离的端口加 server 进价值里。

ADO.NET 关键词同义词

在v1.11.0及之后版本中,ADO格式也接受Microsoft.的替代关键词拼写。Data.SqlClient所使用的,允许你重用为.NET应用程序编写的连接字符串。 关键字不区分大小写。

ADO.NET 关键词 go-mssqldb 参数
AddrAddressNetwork AddressData Source server
UserUID user id
PWD password
Initial Catalog database
AppApplication Name app name
Connect TimeoutTimeout connection timeout
Application Intent applicationintent
Failover Partner failoverpartner
Failover Partner SPN failoverpartnerspn
Trust Server Certificate trustservercertificate
Multi Subnet Failover multisubnetfailover
Host Name In Certificate hostnameincertificate
Server SPN serverspn
Server Certificate servercertificate
WSID workstation id
Column Encryption Setting columnencryption

以下 连接字符串 仅使用同义词:

Data Source=<server>;Initial Catalog=AdventureWorks2025;UID=<user>;PWD=<password>;Connect Timeout=30

这些同义词仅适用于ADO格式。 URL 和 ODBC 格式接受右列驱动参数名称。

ODBC格式

ODBC格式使用 odbc: 带有分号 key=value 对的前缀。 包含特殊字符的值可以用大括号括住:

odbc:server=<server>;user id=<user>;password={<password>};database=AdventureWorks2025

支架脱落

在ODBC格式中,将一个值包裹起来 {} 以避开分号、等号和其他特殊字符。 要包含字 } 面上的内括,则加倍:

odbc:password={my}}password}

通用参数

以下参数在三种格式中共享。 驱动程序只解析 ADO格式 连接字符串中的别名。 URL 和 ODBC 格式的连接字符串除了大小外,参数名称完全匹配。

参数 Aliases Description
user id user SQL Server 登录名。
password - SQL Server登录密码。
database - 目标数据库名称。
connection timeout - 登录交换超时只需几秒。 驱动程序默认为 0,这对登录交换没有超时。 初始网络连接由 单独 dial timeout边界。 我更倾向于用 Go 上下文来控制连接和查询超时。 对于启用自动暂停的Azure SQL 数据库无服务器,首次连接到暂停数据库时会以错误40613失败,而数据库则会恢复。 增加重试逻辑,而不是更长的超时。 数据库通常不到一分钟就能恢复。 更多信息请参见 自动暂停和自动恢复
dial timeout - 网络拨号超时只需几秒钟。 驱动程序默认为每个注册协议15秒。 设置 0 是应用同样的默认设置,而不是无限期等待。
encrypt - 加密模式:stricttrue/mandatory , ,false/optional , 。 disable 省略时,默认为 false/optional。 对于 Azure SQL 和 production connections, set encrypt=true explicitly.
TrustServerCertificate - 跳过证书验证。 当 encrypt 指定时,默认为 false。 当 encrypt 省略时,默认为 true。 用于false生产和 Azure SQL 连接。
app name - 应用程序名称传给服务器。
authenticator - 定制认证器。 被包装内部使用 azuread

有关连接选项的完整列表,请参见 连接选项

在代码中构建连接字符串

使用类型 url.URLmsdsn.Config 结构体来编程构建连接字符串,而不是直接串接原始字符串。 这种方法避免了注入和编码问题。

网址构建器

使用url.URL标准库来安全地构造连接字符串:

import "net/url"

query := url.Values{}
query.Add("database", "AdventureWorks2025")
query.Add("encrypt", "true")
query.Add("TrustServerCertificate", "false")

u := &url.URL{
    Scheme:   "sqlserver",
    User:     url.UserPassword("<user>", "<password>"),
    Host:     "<server>.database.windows.net:1433",
    RawQuery: query.Encode(),
}
connString := u.String()

NewConnectorConfig

用于NewConnectorConfigmsdsn.Config结构化配置,尤其是当你需要设置自定义拨号器,SessionInitSQL或显式的TLS设置时TrustServerCertificate,比如:

import (
    "database/sql"
    "github.com/microsoft/go-mssqldb"
    "github.com/microsoft/go-mssqldb/msdsn"
)

config := msdsn.Config{
    Host:                   "<server>",
    Port:                   1433,
    Database:               "AdventureWorks2025",
    TrustServerCertificate: false,
}

connector := mssql.NewConnectorConfig(config)
db := sql.OpenDB(connector)

如果你仍然依赖已 mssql 弃用的驱动名行为来重写 ? 占位符,建议在构建连接器时使用 NewConnectorWithProcessQueryText 代替 NewConnectorConfig