Go - 连接到外部mysql数据库

时间:2013-05-26 18:17:20

标签: mysql go

我很擅长使用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中多次使用过相同的数据库服务。

2 个答案:

答案 0 :(得分:0)

感谢每个人的答案。

Go的mysql驱动程序目前很难处理较旧的mysql版本。特别是这个问题是由于2006年mysql的old_password不兼容而引起的。因此使用旧数据库是一件痛苦的事。 (来源:https://github.com/go-sql-driver/mysql/wiki/old_passwords) - 我受过教育的猜测也适用于抛出“错误连接”错误的mymysql驱动程序。重复尝试连接后基本会超时。

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

答案 1 :(得分:0)

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