Go-MSSQLDB 連線字串

驅動go-mssqldb程式接受三種 連接字串 格式:URL、ADO 和 ODBC。 這三種格式都支援相同的連線參數。 選擇最適合你應用程式或部署模式的格式。

Tip

新的圍棋應用請使用 URL 格式。 它能與 Go net/url 套件整合,確保安全編碼與程式化建構。 從 .NET 應用程式移植連接字串時,使用 ADO 格式;若包含分號或其他特殊字元,則使用 ODBC 格式,若大括號轉義會更方便。

網址格式

URL 格式遵循此 sqlserver:// 方案,也是 Go 應用程式中最常見的格式:

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

Examples

透過 SQL 驗證連接到本地預設實例:

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

連接到具名執行個體:

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

連接 Azure SQL Database:

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

使用 Windows 驗證(僅限 Windows):

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

Note

在 URL 格式中,埠口預設為 1433。 若要指定不同的埠,請在主機 sqlserver://<server>:1434?database=AdventureWorks2025後面加。

密碼中的特殊字元

在網址格式中,帶有特殊字元的密碼必須以百分比編碼。 需要編碼的常見字元:

Character 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

Note

在 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 Database 無伺服器,第一次連線暫停資料庫會以錯誤 40613 失敗,而資料庫則會恢復。 加入重試邏輯,而不是延長逾時時間。 資料庫通常在不到一分鐘內恢復。 欲了解更多資訊,請參閱 自動暫停與自動繼續
dial timeout - 網路撥號超時只需幾秒鐘。 驅動程式預設為每個註冊協定 15 秒。 設定 0 會套用同樣的預設值,而不是無限期等待。
encrypt - 加密模式:stricttrue/mandatoryfalse/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.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