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.

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:

Parameter Aliases Description
user id user Nama login SQL Server.
password - Kata sandi untuk login SQL Server.
database - Nama database target.
connection timeout - Batas waktu login dalam hitungan detik. Default driver adalah 0, yang menunggu tanpa batas waktu. Lebih suka menggunakan konteks Go untuk mengontrol batas waktu koneksi dan kueri.
dial timeout - Batas waktu panggilan jaringan dalam hitungan detik. Default driver didasarkan pada protokol terdaftar. Atur 0 untuk 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.