使用golang sql连接mysql时,如果我的用户名中包含@符号怎么办?

Posted

技术标签:

【中文标题】使用golang sql连接mysql时,如果我的用户名中包含@符号怎么办?【英文标题】:What if my user name contains at sign '@' when use golang sql to connect mysql? 【发布时间】:2022-01-11 17:09:36 【问题描述】:

应用程序需要一个名称包含@字符的用户,我发现golang-sql似乎会在名称包含@并且密码为空时崩溃,就像

sql.Open("mysql", "root@proxy@tcp(172.21.30.22:3306)..")

【问题讨论】:

尝试Config.FomatDSN 让驱动程序代码自己做必要的事情。 @kostix 我不认为this helps in this case - 因为@ 没有被转义。我肯定已经看到 MySQL 驱动程序在密码中出现特殊字符 - 即使使用 Config.FormatDSN 也是如此。因此,当前的 mysql Go 驱动程序可能无法使用 OP 的凭据。 如果是这样——我的意思是即使负责准备句法正确的 DSN 的 stock 函数无法解决它——这是一个值得上游报告的错误。 来自 MySQL 的 This manual 说在适用的情况下使用%40 而不是@,并且还建议了一种称为“键值对”的替代方法。我会尝试这两件事。不过,我也会报告一个错误。 【参考方案1】:

当您在用户名中使用特殊字符时,您应该使用引号将用户名与域名分开

例如

sql.Open("mysql", "'root@proxy'@'tcp(172.21.30.22:3306)'")

【讨论】:

没用.....

以上是关于使用golang sql连接mysql时,如果我的用户名中包含@符号怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

golang mysql 设置最大连接数

[Go] golang实现mysql连接池

golangmysql可扩展分表代码

golang 碎片整理之MySQL

golang 连接池mysql

golang 连接池mysql