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()

时间: 2025-01-21 13:36:04

mymysql与go-mysql-driver的一个区别的相关文章

mysql driver的bug的深入分析

1 问题描述: 下面是应用上线后的线程个数的曲线图:   通过观察线程数:从0.2k增加到1.4k,然后突然又变成0.2k. 所有增加的线程均为Damon的线程. 有如下几个疑问:    1:为什么线程数会一直增加,出现了线程泄露?    2:在某个时间点线程数突然降了1.2k,why? 1.1 线程泄露排查    通过jstack打印栈信息,发现大部分的线程描述如下.(省略了部分栈信息) "MySQL  Statement Cancellation Timer" #2952daemo

org.gjt.mm.mysql.Driver

  org.gjt.mm.mysql.Driver是com.mysql.jdbc.Driver的前身,如果你的项目中用到的是org.gjt.mm.mysql.Driver驱动,只是为了兼容性.和用com.mysql.jdbc.Driver没区别. 但是现在的项目建议使用com.mysql.jdbc.Driver.下面是测试代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 p

mysql与mysqli的区别与用法

  mysql与mysqli的区别与用法 mysql是非持继连接函数而mysqli是永远连接函数.也就是说 mysql每次链接都会打开一个连接的进程而mysqli多次运行mysqli将使用同一连接进程,从而减少了服务器的开销 有些朋友在编程的时候,使用new mysqli('localhost', usenamer', 'password', 'databasename');总是报错,Fatal error: Class 'mysqli' not found in d:... mysqli类不是

Oracle 和 mysql的9点区别

 这篇文章主要介绍了Oracle 和 mysql的9点区别,需要的朋友可以参考下 1.组函数用法规则   mysql中组函数在select语句中可以随意使用,但在oracle中如果查询语句中有组函数,那其他列名必须是组函数处理过的,或者是group by子句中的列否则报错 eg:select name,count(money) from user:这个放在mysql中没有问题在oracle中就有问题了   2.自动增长的数据类型处理   MYSQL有自动增长的数据类型,插入记录时不用操作此字段,

MySQL Driver 5.1.X与6.X日期兼容性问题

1.引言 最近在一个新项目里尝试使用mysql-connector-java-6.0.5.jar,但是从MaxCompute(原名ODPS)中导入MySQL的数据在控制台中看到是正常的,从Java应用里读取的却是相差13或14小时的.甚至SQL里限定了数据的时间在某一天,应用查出来的数据还能是不在那天的.这就很奇怪了,本着求根问底,踩坑识坑的精神,好好地研究了一把. 首先看从http://search.maven.org中可以大概的看到MySQL Driver的发布历史: 5.1.X和6.X版本

org.gjt.mm.mysql.Driver的数据库类

package pubcls;    import java.sql.*;    /**   * MySql 简单操作类   * @author itblt   */  public class Mysql  {      public Connection liveCon = null;      public int dbWaitTime = 3600;      public String dbLang = "";      public String errMessage = 

php中mysql和mysqli的区别

一:Mysqli.dll是一个允许以对象的方式或者过程操作数据库的,它的使用方式也很容易.这里就几个常见的操作和mysql.dll做一个对比. 1:mysql.dll(可以理解为函数式的方式): $conn = mysql_connect('localhost', 'user', 'password'); //连接mysql数据库 mysql_select_db('data_base'); //选择数据库 $result = mysql_query('select * from data_bas

MySQL怎样处理一个溢出的磁盘

mysql 当出现一个磁盘溢出的情况时,MySQL做下列事情: 它每分钟检查一次看是否有足够空间写入当前行.如果有足够的空间,它继续好像发生什么事情. 每6分钟它将有关磁盘溢出的警告写入日志文件. 为了缓和这个问题,你可以采取下列行动: 继续,你只需释放足够的空闲磁盘空间以便插入所有记录. 放弃线程,你必须发一个mysqladmin kill到线程.在下一次检查磁盘时,线程将被放弃(在1分钟内). 注意,其他线程可能正在等待引起"磁盘溢出"条件的表.如果你有几个"锁定的&qu

如何使用jQuery+PHP+MySQL来实现一个在线测试项目

  如何使用jQuery+PHP+MySQL来实现一个在线测试项目         本文将结合实例给大家介绍如何使用jQuery+PHP+MySQL来实现在线测试题,包括动态读取题目,答题完毕后台评分,并返回答题结果. 在上一篇文章中,我们介绍了使用jQuery实现的测试题效果.那么本文将结合实例给大家介绍如何使用jQuery+PHP+MySQL来实现在线测试题,包括动态读取题目,答题完毕后台评分,并返回答题结果.这是一篇WEB综合应用文章,建议阅读本文的您应该具备HTML,jQuery以及PH

mysql-请问往MYSQL里导入一个SQL表,为什么会报这个错误?

问题描述 请问往MYSQL里导入一个SQL表,为什么会报这个错误? 开始导入----------> 然后就提示--------> 文件路径: 我选择的路径没错额:D:源代码下载存储day7-mysql多表资料与作业EMPDEPT.sql 信息日志如下: [Err] 1051 - Unknown table 'dept' [Err] -- ---------------------------- -- Table structure for DEPT DROP TABLE DEPT; CREAT