您好,欢迎访问一九零五行业门户网

mymysql与go-mysql-driver的一个差别

mymysql与go-mysql-driver的一个区别 今天要写个工具就想顺便学下 go 。网上翻了下发现用比较多的是 mymysql 和 go-mysql-driver 。 这两个驱动网上比较的文章也有些了,不过都没有提到一个点,个人觉得是很重要的,记录一下。 先看使用 go-mysq
mymysql与go-mysql-driver的一个区别
今天要写个工具就想顺便学下go。网上翻了下发现用比较多的是mymysql和go-mysql-driver。
这两个驱动网上比较的文章也有些了,不过都没有提到一个点,个人觉得是很重要的,记录一下。
先看使用go-mysql-driver的例子。
db,_:=sql.open(mysql,connect_string)
db.query(set binlog_format=row)
?
rows,_:=db.query(select @@binlog_format)
forrows.next(){
varvstring
rows.scan(&v)
fmt.println(v)? // 输出是mixed (global值)
}
rows.close()
db.close()
?
?从上面的输出可以看到,set语句无效。
原因是在database/sql这个库实现中, 上面的变量db维护的是一个线程池,而不是一个线程,因此前后两次执行db.query并不保证在同一个session里面。
同样的, set @a=1,这种线程变量也是可能在后续的select中得不到1这个值。
?
?
由于mymysql 不是基于database/sql,以下代码能确保输出19
?
mydb := mysql.new(tcp, , ip:port”, user, password, dbname)
? mydb.connect()
? mydb.query(set @a=19)
? res, _ := mydb.start(select @a)
? for {
? row, _ := res.getrow()
? if row == nil {break}
? fmt.println(row.str(0))
? }
?
? mydb.close()
其它类似信息

推荐信息