Go连接MySQL的方式问题
来源:互联网 发布:模锻力计算模拟软件 编辑:程序博客网 时间:2024/05/21 19:42
在系统安装好mysql,go以及mysql-go的驱动之后,需要做的就是连接mysql,给个简短的连接数据库代码如下:
package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql")func main() {db, err := sql.Open("mysql", "user:password@/test")//对应数据库的用户名和密码defer db.Close()if err != nil {panic(err)} else {fmt.Println("success")}rows, err := db.Query("SELECT number FROM squarenum")if err != nil {panic(err)return}for rows.Next() {var name interr = rows.Scan(&name)if err != nil {panic(err)}fmt.Println(name)}}
以上代码是默认情况下的连接方式,但在某种状况下,上述方式连接不上的时候,而且提示:
<span style="font-size:14px;">panic: runtime error: invalid memory address or nil pointer dereference</span>经过查阅多方资料,找到的答案是指定具体连接mysql的方式有三种不同代码:
①
db, err := sql.Open("mysql", "user:password@unix(/tmp/mysql.sock)/test")
②
db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/test") //指定IP和端口
③
db, err := sql.Open("mysql", "user:password@/test") //默认方式
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">那么,这两种方式的区别在哪呢?首先可以看下面两幅图片:</span>
每一次外部以某种身份连接到mysql的时候,mysql会新增一个Connection id,Connection显示的是该程序连接到mysql的连接方式。
图片中给出了两个不同用户的状态,注意两个用户的连接方式,一个是via TCP/IP,另一个是via UNIX socket。还发现一个微小的问题,就是端口号指定问题,端口号的范围是0-65535,因此对于大于65535的端口号会出现系统识别不了的问题。这只是对像我一样的初学者的提醒。
查看用户发现一个问题就是,系统为什么会有那么多的root用户,其实对于mysql而言,host+username才是一个基本单位,所以可以认为root在不同host名下是不同的用户
1、::1应该是表示本地的v6地址
2、没有用户名的话,应该是匿名用户了
3、对于mysql来讲,127.0.0.1和localhost应该不一样的;
在采用默认连接方式,即③的时候,panic: Error 1045: Access denied for user 'root'@'localhost' (using password: YES)
证明系统默认选择的root是没有密码的,如果需要用root@localhost需要额外指定,如:db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/test")
综上所述,问题大致源于用户管理问题,所以理清这些问题,自然就可以解决出现的问题。
- Go连接MySQL的方式问题
- go 连接 mysql 数据库
- go连接mysql数据库
- go连接mysql
- go连接mysql数据库
- c++ odbc方式连接mysql产生预处理问题的跟踪
- mysql表的连接方式
- Mysql的各种连接方式
- mysql 连接关闭问题和解决方式
- mysql连接的问题
- 使用GO连接MYSQL数据库
- golang go-sql-drive mysql连接池的实现
- go语言连接mysql数据库的个人理解
- golang go-sql-drive mysql连接池的实现
- MySQL数据库中因使用旧的加密方式无法远程连接的问题
- PHP6中mysql连接方式的改变
- .NET 连接Mysql的一种方式
- C#连接mysql数据库的方式
- 为什么riak集群最好至少要五个节点以上
- 小技巧:利用虚拟网卡解决虚拟主机引起的异构网络问题
- 在服务器外测试webservice
- 有return的情况下try catch finally的执行顺序
- Java 单例模式详解
- Go连接MySQL的方式问题
- Andriod中绘(画)图----Canvas的使用详解
- js 中读取JSON的方法探讨
- 遗传算法入门到掌握(二)
- 从2891个专栏里找出来的宝贝,望珍惜
- 关于字符串指针
- js函数的作用域与this指向
- 多重背包的两种求解形式
- Android Service完全解析,关于服务你所需知道的一切(上)