You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言连接SQL Server时连接字符串转义字符问题求助

问题原因

问题出在URL的编码规则上:

  • 你替换得到的DSN里包含\,但在URL格式中,\属于非法字符,URL解析器会直接抛出错误。
  • fmt.Println输出时,显示的是字符串的字面视觉效果,但实际传递给sqlserver.Open的字符串里,\没有经过URL编码,不符合URL规范。
解决方案

有两种可靠的解决方式:

方式一:手动URL编码反斜杠

把\替换成URL编码后的%5C,而非直接替换成\:

str := "sqlserver://DESKTOP-AAAC9AC@SQLEXPRESS?database=GolangPlay"
// 将@替换为URL编码的反斜杠%5C
dsn := strings.Replace(str, "@", "%5C", -1)
fmt.Println("CS be like : " + dsn)
_, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{})

方式二:使用net/url包构建DSN(推荐)

借助官方net/url包的URL结构体构建DSN,它会自动处理特殊字符的编码,避免手动操作出错:

import "net/url"

u := &url.URL{
    Scheme: "sqlserver",
    Host:   "DESKTOP-AAAC9AC\\SQLEXPRESS", // 这里使用原生反斜杠,结构体自动完成编码
    RawQuery: url.Values{
        "database": []string{"GolangPlay"},
    }.Encode(),
}
dsn := u.String()
fmt.Println("CS be like : " + dsn)
_, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{})

生成的DSN会自动将\转译为%5C,完全符合URL解析规范,驱动就能正常识别连接信息。

内容的提问来源于stack exchange,提问作者Kamil Wójcik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:01:01