String koneksi go-mssqldb

go-mssqldb Driver menerima tiga format string koneksi: URL, ADO, dan ODBC. Ketiga format mendukung serangkaian parameter koneksi yang sama. Pilih format yang paling sesuai dengan aplikasi atau model penyebaran Anda.

Tip

Gunakan format URL untuk aplikasi Go baru. Ini terintegrasi dengan paket Go net/url untuk pengkodean yang aman dan konstruksi terprogram. Gunakan format ADO saat memindahkan string koneksi dari aplikasi .NET, dan gunakan format ODBC saat pengulangan kurung kurawal lebih nyaman untuk nilai yang berisi titik koma atau karakter khusus lainnya.

Format URL

Format URL mengikuti sqlserver:// skema dan merupakan format yang paling umum untuk aplikasi Go:

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

Examples

Sambungkan ke instans default lokal dengan autentikasi SQL:

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

Sambungkan ke instans bernama:

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

Menyambungkan ke Azure SQL Database:

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

Gunakan Windows authentication (khusus Windows):

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

Note

Dalam format URL, port default ke 1433. Untuk menentukan port yang berbeda, sertakan setelah host: sqlserver://<server>:1434?database=AdventureWorks2025.

Karakter khusus dalam kata sandi

Dalam format URL, sandi dengan karakter khusus harus dikodekan persen. Karakter umum yang memerlukan pengkodean:

karakter Encoded Contoh kata sandi Formulir yang dikodekan
@ %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

Gunakan url.UserPassword() untuk menangani pengodean secara otomatis:

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

Dalam format ADO, pengkodean persen tidak diperlukan. Jika nilai berisi titik koma, bungkus dengan tanda kutip ganda: password="<password>". Dalam format ODBC, bungkus nilai dalam kurung kurawal sebagai gantinya: password={<password>}.

Format ADO

Format ADO menggunakan pasangan yang dipisahkan key=value titik koma:

server=<server>;user id=<user>;password=<password>;database=AdventureWorks2025

Contoh ADO

Hubungkan dengan nomor port:

server=<server>;port=1434;user id=<user>;password=<password>;database=AdventureWorks2025

Sambungkan ke instans bernama:

server=<server>\myinstance;user id=<user>;password=<password>;database=AdventureWorks2025

Note

Dalam format ADO, server bidang dan port adalah parameter terpisah. Jangan sertakan port yang dipisahkan titik dua dalam server nilai.

Sinonim kata kunci ADO.NET

Pada versi v1.11.0 dan versi berikutnya, format ADO juga menerima ejaan kata kunci alternatif yang digunakan Microsoft. Data.SqlClient, yang memungkinkan Anda menggunakan kembali string koneksi yang ditulis untuk aplikasi .NET. Kata kunci tidak sensitif terhadap huruf besar/kecil.

Kata kunci ADO.NET parameter go-mssqldb
Addr,Address,Network Address,Data Source server
User, UID user id
PWD password
Initial Catalog database
App, Application Name app name
Connect Timeout, Timeout 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

string koneksi berikut hanya menggunakan sinonim:

Data Source=<server>;Initial Catalog=AdventureWorks2025;UID=<user>;PWD=<password>;Connect Timeout=30

Sinonim ini hanya berlaku untuk format ADO. Format URL dan ODBC menerima nama parameter driver di kolom kanan.

Format ODBC

Format ODBC menggunakan odbc: awalan dengan pasangan yang dipisahkan key=value titik koma. Nilai yang berisi karakter khusus dapat diapit dalam kurung kurawal:

odbc:server=<server>;user id=<user>;password={<password>};database=AdventureWorks2025

Kawat gigi keluar

Dalam format ODBC, bungkus nilai untuk {} melarikan diri dari titik koma, tanda sama dengan, dan karakter khusus lainnya. Untuk menyertakan kurung gigi dalam literal } , gandakan:

odbc:password={my}}password}

Parameter umum

Parameter berikut dibagikan di ketiga format. Driver hanya menyelesaikan alias dalam format ADO connection strings. String koneksi format URL dan ODBC cocok persis dengan nama parameter, kecuali casing.

Parameter Aliases Description
user id user Nama login SQL Server.
password - Kata sandi untuk login SQL Server.
database - Nama database target.
connection timeout - Timeout dalam hitungan detik untuk pertukaran login. Default driver adalah 0, yang tidak memberikan timeout pada pertukaran login. Koneksi jaringan awal dibatasi secara terpisah oleh dial timeout. Lebih suka menggunakan konteks Go untuk mengontrol batas waktu koneksi dan kueri. Untuk Azure SQL Database tanpa server dengan auto-pause diaktifkan, koneksi pertama ke database yang dijeda gagal dengan error 40613 saat database dilanjutkan. Tambahkan logika retry, bukan timeout yang lebih lama. Basis data umumnya kembali aktif dalam waktu kurang dari satu menit. Untuk informasi lebih lanjut, lihat Auto-pause dan auto-resume.
dial timeout - Batas waktu panggilan jaringan dalam hitungan detik. Default driver adalah 15 detik per protokol yang terdaftar. Pengaturan 0 menerapkan default yang sama daripada menunggu tanpa batas waktu.
encrypt - Mode enkripsi: strict,true/mandatory , , . false/optionaldisable Jika dihilangkan, defaultnya adalah false/optional. Untuk koneksi Azure SQL dan produksi, atur encrypt=true secara eksplisit.
TrustServerCertificate - Lewati validasi sertifikat. Saat encrypt ditentukan, defaultnya adalah false. Ketika encrypt dihilangkan, defaultnya adalah true. Gunakan false untuk koneksi produksi dan Azure SQL.
app name - Nama aplikasi diteruskan ke server.
authenticator - Pengautentikasi khusus. Digunakan oleh azuread paket secara internal.

Untuk daftar lengkap opsi koneksi, lihat Opsi koneksi.

Membangun string koneksi dalam kode

Gunakan url.URL jenis atau msdsn.Config struktur untuk membuat string koneksi secara terprogram alih-alih menggabungkan string mentah. Pendekatan ini menghindari masalah injeksi dan pengkodean.

Pembuat URL

Gunakan url.URL dari pustaka standar untuk membuat string koneksi dengan aman:

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()

Konfigurasi Konektor Baru

Gunakan NewConnectorConfig dengan msdsn.Config untuk konfigurasi terstruktur, terutama saat Anda perlu menyetel dialer kustom, SessionInitSQL, atau setelan TLS eksplisit seperti 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)

Jika Anda masih bergantung pada perilaku nama driver yang tidak digunakan mssql lagi yang menulis ? ulang placeholder, gunakan NewConnectorWithProcessQueryText alih-alih NewConnectorConfig saat Anda membuat konektor.