插件窝 干货文章 GORM连接SQL Server数据库时,密码包含特殊字符(例如@)如何解决?

GORM连接SQL Server数据库时,密码包含特殊字符(例如@)如何解决?

连接 字符串 密码 字符 422    来源:    2025-03-13

在使用GORM连接SQL Server数据库时,如果密码中包含特殊字符(例如@),可能会导致连接字符串解析错误。这是因为@在连接字符串中通常用于分隔用户名和密码,或者用于指定服务器地址。

为了避免这个问题,你可以对密码中的特殊字符进行URL编码。具体来说,@字符的URL编码是%40。因此,你可以在连接字符串中将@替换为%40

以下是一个示例,展示如何在GORM连接SQL Server时处理包含特殊字符的密码:

package main

import (
    "gorm.io/driver/sqlserver"
    "gorm.io/gorm"
)

func main() {
    // 假设密码是 "p@ssw0rd"
    password := "p%40ssw0rd"  // 将 @ 替换为 %40

    // 构建连接字符串
    dsn := "sqlserver://username:" + password + "@localhost:1433?database=yourdbname"

    // 连接数据库
    db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }

    // 使用 db 进行数据库操作
}

关键点:

  1. URL编码:将密码中的特殊字符(如@)替换为对应的URL编码(%40)。
  2. 连接字符串:在构建连接字符串时,确保密码部分已经进行了URL编码。

其他常见特殊字符的URL编码:

  • ! -> %21
  • # -> %23
  • $ -> %24
  • % -> %25
  • & -> %26
  • ( -> %28
  • ) -> %29
  • * -> %2A
  • + -> %2B
  • , -> %2C
  • / -> %2F
  • : -> %3A
  • ; -> %3B
  • = -> %3D
  • ? -> %3F
  • [ -> %5B
  • ] -> %5D

通过这种方式,你可以确保连接字符串中的密码部分不会被错误解析,从而成功连接到SQL Server数据库。