该go-mssqldb驱动程序支持多种传输协议以连接 SQL Server。 本文介绍了每种协议及其配置方法。
协议参数
设置 protocol 连接参数以指定传输方式:
| Value | Protocol | Description |
|---|---|---|
tcp |
TCP/IP | 默认协议。 适用于所有平台。 |
np |
命名管道 | Windows进程间通信。 支持Windows和Linux(使用SMB)。 |
lpc |
共享内存 | 仅限Windows本地连接。 |
admin |
DAC(TCP) | 专用管理员连接。 连接到DAC端点。 |
如果你不指定 , protocol驱动使用 TCP。
TCP/IP
TCP是默认且最常见的协议。 在连接字符串中指定主机和端口:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025
或者明确地:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&protocol=tcp
服务器前缀格式
你也可以在服务器名称上指定协议前缀(ADO/ODBC格式):
server=tcp:<server>,1433;user id=<user>;password=<password>;database=AdventureWorks2025
注释
在 ADO 前缀格式中,端口用逗号分隔,而非冒号。
命名管道
命名管道使用该 np 协议。 用参数指定管道路径 pipe :
sqlserver://<user>:<password>@<server>?database=AdventureWorks2025&protocol=np&pipe=\sql\query
或者使用服务器前缀格式:
server=np:<server>\myinstance;user id=<user>;password=<password>;database=AdventureWorks2025
默认管道名称是 \sql\query 默认实例的。
当前驱动版本除了在 Windows 上支持 Arm64 的命名管道连接,同时也支持 Windows 和 Linux 上通过 SMB 暴露管道的 x86-64 环境。
命名实例管道名称
对于命名实例,管道路径通常 \MSSQL$INSTANCENAME\sql\query为 。 如果你知道管道路径,就直接指定。 否则,省略pipe该参数,让 SQL Server 浏览器解析它。
共享内存
共享内存(lpc)为Windows本地连接提供了最快的通信方式。 它只有在客户端和服务器在同一台机器上时才有效:
sqlserver://<user>:<password>@localhost?database=AdventureWorks2025&protocol=lpc
或者用服务器前缀:
server=lpc:.\myinstance;user id=<user>;password=<password>;database=AdventureWorks2025
注释
Linux和macOS上不支持共享内存。
专用管理员连接(DAC)
当服务器无响应时,DAC会提供与SQL Server的特殊诊断连接。 DAC监听专用端口(默认实例为1434):
sqlserver://<user>:<password>@<server>?database=AdventureWorks2025&protocol=admin
或者用服务器前缀:
server=admin:<server>;user id=<user>;password=<password>;database=AdventureWorks2025
Warning
SQL Server 一次只允许一个 DAC 连接。 DAC只用于紧急诊断。
SQL Server 浏览器
当驱动程序连接到未指定端口的命名实例时,它会联系 SQL Server 浏览器服务(UDP 端口 1434)以解析该实例为 TCP 端口。 确保目标机器上运行着SQL Server浏览器服务。
sqlserver://<user>:<password>@<server>\myinstance?database=AdventureWorks2025
协议选择指南
| 情景 | 推荐方案 |
|---|---|
| 远程连接 | tcp |
| Windows 上的本地连接 |
lpc (最快)或 tcp |
| 跨平台应用 | tcp |
| 紧急诊断 | admin |
| 需要命名管道的遗留应用 | np |