驱动程序go-mssqldb支持三种 连接字符串 格式:URL、ADO 和 ODBC。 这三种格式都支持相同的连接参数。 选择最适合你应用或部署模式的格式。
Tip
新的围棋应用使用URL格式。 它与 Go net/url 的软件包集成,实现了安全的编码和程序化构建。 从.NET应用程序移植连接字符串时使用ADO格式;当包含分号或其他特殊字符的值转义更方便时,使用ODBC格式。
URL 格式
URL 格式遵循该 sqlserver:// 方案,是 Go 应用中最常见的格式:
sqlserver://username:password@host:port?database=AdventureWorks2025¶m=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格式中, server 和 port 字段是独立的参数。 不要把结肠分离的端口加 server 进价值里。
ODBC格式
ODBC格式使用 odbc: 带有分号 key=value 对的前缀。 包含特殊字符的值可以用大括号括住:
odbc:server=<server>;user id=<user>;password={<password>};database=AdventureWorks2025
支架脱落
在ODBC格式中,将一个值包裹起来 {} 以避开分号、等号和其他特殊字符。 要包含字 } 面上的内括,则加倍:
odbc:password={my}}password}
通用参数
以下参数在三种格式中共享:
| 参数 | Aliases | Description |
|---|---|---|
user id |
user |
SQL Server 登录名。 |
password |
- | SQL Server登录密码。 |
database |
- | 目标数据库名称。 |
connection timeout |
- | 登录超时只需几秒钟。 驱动程序默认值是 0,等待时间无限期。 我更倾向于用 Go 上下文来控制连接和查询超时。 |
dial timeout |
- | 网络拨号超时只需几秒钟。 驱动程序默认是基于注册协议的。 设置为 0 无限期等待。 |
encrypt |
- | 加密模式:strict,true/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.URL 或 msdsn.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 。