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
相关产品推荐
相关产品推荐

