Go-MSSQLDB 连接选项

本文提供了驱动程序接受 go-mssqldb 的所有连接参数的完整参考资料。 关于连接字符串格式语法,请参见连接字符串

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

通用参数

参数 Aliases 违约 Description
user id user - SQL Server 登录名。
password - - SQL Server登录密码。
database - - 目标数据库。
connection timeout - 0 登录交换超时只需几秒。 0 登录交换不超时,但初始网络连接被单独 dial timeout限制。 更倾向于使用 Go 上下文进行连接和查询超时。 对于启用自动暂停的Azure SQL 数据库无服务器,首次连接到暂停数据库时会以错误40613失败,而数据库则会恢复。 增加重试逻辑,而不是更长的超时。 数据库通常不到一分钟就能恢复。 更多信息请参见 自动暂停和自动恢复
dial timeout - 15 x protocol count 网络拨号超时只需几秒钟。 0 默认每个注册协议需15秒等待,而非无限等待。
encrypt - false 加密模式。 Azure SQL 总是需要服务器端加密。 参见 加密与证书
app name - - 登录记录中发送的应用名称。
authenticator - - 由外部包注册的自定义认证器,如 azuread

服务器与端口

在ADO和ODBC格式中,服务器和端口是独立的参数:

参数 违约 Description
server localhost SQL Server主机名,可选地包含 \instance
port 1433 TCP端口号。

在 URL 格式中,直接在 URL 中指定主机和端口: sqlserver://host:port

故障转移

参数 违约 Description
failoverpartner - 故障切换合作伙伴服务器主机名。
failoverpartnerspn - 故障切换合作伙伴的服务主体名称(SPN)。
failoverport 1433 备援合作伙伴的TCP端口。

当主服务器无法访问时,驱动程序会尝试自动连接到故障切换伙伴。

网络与性能

参数 Aliases 违约 Description
packet size - 4096 TDS数据包大小(字节单位)。 有效范围:512-32767。
keepAlive - 30 保持生命的间隔在几秒内。 值 是 0 的默认 30秒,而不是让操作系统决定。
TrustServerCertificate - 取决于 encrypt true时,跳过服务器证书验证。 默认情况下是false指定时encrypttrueencrypt省略。 当encrypt=strict时,将被忽略。 不建议用于生产。
multisubnetfailover multi subnet failover true 当DNS解析主机为多个IP地址时,这种拨号行为。 当 和 DNS 返回多个地址时 true ,驱动程序并行拨打所有已解析的端点,并使用第一个成功连接。 当DNS返回单一地址时,驱动程序会顺序拨号,因此 true 在单IP目标上是安全的。 保留可用性组监听器、故障转移集群实例和 Azure SQL 故障转移组监听器的默认值。 该驱动程序默认为true向下兼容;其他 Microsoft SQL 驱动默认为 false

应用程序意向

参数 价值观 Description
ApplicationIntent ReadOnlyReadWrite 声明应用程序是只读连接还是读写操作。 用于AlwaysOn只读路由。

工作站与SPN

参数 违约 Description
Workstation ID - 登录记录中发送了工作站名称。
ServerSPN - SQL Server 的服务主体名称。 仅在非默认的SPN配置中要求。

Protocol

参数 价值观 Description
protocol tcpnplpcadmin 传输协议。 参见 协议
pipe - 命名管道路径。 仅在 protocol=np时适用。

始终加密 (Always Encrypted)

参数 违约 Description
columnencryption None 设置为 true 启用始终加密。 参见 “始终加密”。

加密与TLS

参数 违约 Description
encrypt 参见 常见参数 strict(TDS 8.0), true/mandatoryfalse/optional , . disable
TrustServerCertificate 取决于 encrypt true时跳过证书验证。 默认情况下是false指定时encrypttrueencrypt省略。 当encrypt=strict时,将被忽略。
certificate None 通往PEM或DER证书文件的路径,用于证书链验证。
serverCertificate None 路径指向PEM或DER证书文件,用于字节级比较(v1.5.0及更高版本)。
hostnameincertificate None 覆盖TLS证书验证中使用的主机名称。
tlsmin None 最低TLS版本:1.01.1, , 1.21.3, 。

有关详细的加密指导,请参见 “加密与证书”。

日志标志

用参数 log 来控制诊断输出。 值是位掩码标志,你可以通过将整数值加起来:

Value Description
1 日志错误
2 日志消息
4 原木排
8 记录 SQL 语句
16 日志参数
32 日志事务
64 日志调试信息
128 日志重试

示例:要记录错误和SQL语句,设置 log=9 (1 + 8)。

更多信息请参见 日志与诊断

唯一标识符列

驱动程序默认将 uniqueidentifier 列读取为原始字节数组。 要获得标准的GUID格式字符串,请用扫描 进入 mssql.UniqueIdentifier 代替 string[]byte。 驱动不支持通过连接参数自动转换GUID。

SessionInitSQL

SessionInitSQL不是 连接字符串 参数。 通过 NewConnectorConfig API设置:

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

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

connector := mssql.NewConnectorConfig(config)
connector.SessionInitSQL = "SET ANSI_NULLS ON"
db := sql.OpenDB(connector)

SQL 语句在每次新连接建立后立即运行,连接返回调用者之前。