博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mymysql与go-mysql-driver的一个区别
阅读量:7105 次
发布时间:2019-06-28

本文共 755 字,大约阅读时间需要 2 分钟。

今天要写个工具就想顺便学下go。网上翻了下发现用比较多的是mymysqlgo-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()

转载地址:http://sqjhl.baihongyu.com/

你可能感兴趣的文章
CocoaPods 安装的第三方删除
查看>>
jsonk可以传递boolean
查看>>
编程常见命名规范
查看>>
windows7系统配置maven环境
查看>>
浅谈第三方电子支付平台测试方法的研究
查看>>
【DOM编程艺术】滑过高亮显示 highLightRows
查看>>
如何设置静态内容缓存时间
查看>>
iOS开发多线程篇—多线程简单介绍
查看>>
使用PHP QR Code生成二维码
查看>>
日志统计 尺取法【蓝桥杯2018 C/C++ B组】
查看>>
移动web开发规范
查看>>
myeclipse操作记录
查看>>
$http设置headers来实现IE不缓存url请求的资源
查看>>
codeforces 381 D Alyona and a tree(倍增)(前缀数组)
查看>>
ISO7220M芯片调试总结
查看>>
系统中纹波大
查看>>
GPS经纬度转换为百度坐标
查看>>
3班6组第一次迭代博客
查看>>
J2EE (三) Filter详解
查看>>
Oracle 常用函数(Decode,sign,lpad)
查看>>