驅動go-mssqldb程式接受三種 連接字串 格式:URL、ADO 和 ODBC。 這三種格式都支援相同的連線參數。 選擇最適合你應用程式或部署模式的格式。
Tip
新的圍棋應用請使用 URL 格式。 它能與 Go net/url 套件整合,確保安全編碼與程式化建構。 從 .NET 應用程式移植連接字串時,使用 ADO 格式;若包含分號或其他特殊字元,則使用 ODBC 格式,若大括號轉義會更方便。
網址格式
URL 格式遵循此 sqlserver:// 方案,也是 Go 應用程式中最常見的格式:
sqlserver://username:password@host:port?database=AdventureWorks2025¶m=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 格式中, 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.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
使用 NewConnectorConfig 來 msdsn.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 。