【问题标题】:Go - Connecting to a external mysql databaseGo - 连接到外部 mysql 数据库
【发布时间】:2013-05-21 16:00:10
【问题描述】:

我对使用 go 比较陌生,并且在连接到外部 mysql 数据库时遇到问题。 我正在使用 go-sql-driver ,它的接缝相当不错。欢迎向其他司机提出建议!

这是整个程序:

import (
  "database/sql"
   _ "github.com/go-sql-driver/mysql"
  "fmt"
)

const (
  DB_HOST = "tcp(http://thedburl.com)"
  DB_NAME = "nameofdatabase"
  DB_USER = "username"
  DB_PW = "password"
)

func main() {
  dsn := DB_USER + ":" + DB_PW + "@" + DB_HOST + "/" + DB_NAME + "?charset=uf8"
  db, err := sql.Open("mysql", dsn)

  if err != nil {
       fmt.Println("shiiet didn't work yo! Initialization failed")
  }

  defer db.Close() // go's purty cool

  var str string
  q := "SELECT * FROM forums"
  err = db.QueryRow(q).Scan(&str)

  if err != nil {
      fmt.Println(err)
  }

  fmt.Println(str)
}

根据请求,我收到以下错误

 "GetAddrInfoW: The specified class was not found."

有什么想法吗?我在网上坐了几个小时,似乎无法解决问题。 可能值得注意的是,我在 java 中多次使用相同的数据库服务。

【问题讨论】:

  • 你是怎么安装驱动的?使用go get ?你用的是 Go1.1 吗?
  • 是的,通过 go get 提示,我正在使用 Go 1.1 :) 这对我来说是一个疯狂的谜......!
  • 我要解决的是驱动程序问题。我似乎找不到问题所在。当我调用“go get github.com/go-sql-driver/mysql”时,我得到一个加载时间,但没有响应。 Go list 也出现了问题,给了我一个奇怪的结果。
  • “按要求”是什么意思?另外,这个“tcp(thedburl.com)”真的是你代码中的样子吗?在这种情况下,去掉“http”位。
  • http:// 在数据库 URL 中做了什么? tcp 传输的 MySQL URL 采用 hostname_or_ip[:port] 的形式。

标签: mysql go


【解决方案1】:

有趣的是,这个错误也可能是由服务器端口中的空格引起的,如server.Run(":8080 ") vs server.Run(":8080")

【讨论】:

    【解决方案2】:

    感谢大家的回答。

    Go 的 mysql 驱动程序目前很难处理旧的 mysql 版本。具体来说,这个问题是由于 2006 年 mysql 的 old_password 不兼容而发生的。因此,使用旧数据库是一种痛苦。 (来源:https://github.com/go-sql-driver/mysql/wiki/old_passwords) - 我有根据的猜测也适用于引发“连接错误”错误的 mymysql 驱动程序。在重复尝试连接后基本上会超时。

    特别感谢@Lepidosteus,他的回答让我发现了真正的问题。

    【讨论】:

      猜你喜欢
      • 2016-05-30
      • 1970-01-01
      • 2013-09-16
      • 2017-10-15
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多