最近看到不少朋友对 Golang 中操作 MySQL 数据库有疑问,那么就此内容给大家分享一下吧。 MyMySQL 的原作者是来自波兰的 ziutek,他根据 MySQL 的协议标准使用 Golang 实现了 MyMySQL 包。根据他的介绍,这个包可以用在 MySQL 4.1 或更高版本上,并且在 5.0、5.1 版本上经过项目的实际验证。 只要用 MySQL 做过项目的朋友一定遇到过编码问题,set names 几乎成为了中文环境下使用 MySQL 的标配。那么 Golang 也不能例外。不过由于 database/sql 使用了随机的连接池,且未提供任何方法让所有连接都执行某个操作,于是这个麻烦事儿就落到了驱动的肩上。对于中文什么的,大老外一向不怎么在意。我提交了这个 issue 给 ziutek,不过对于他最终实现的方案不怎么满意。需要额外编写godrv.Register 来对编码进行设置。 同时当连接空闲时间超出服务器的 wait_timeout 时,会出现 broken pipe。对于这个问题,ziutek 的建议是使用 MyMySQL 的 autorc,但是 godrv 并没有基于 autorc 实现 database/sql。换句话说,要解决这个错误,只能使用 MyMySQL 原始接口。 鉴于这些问题,我只能 fork 了 ziutek 的项目,对 …
Tag Archives: mysql
Mysql 性能改进——最快实践
没错,标题我没打错。这里不是最佳实践,而是最快实践。在服务器上线,巨大的压力导致相应缓慢的时候,最佳实践已经毫无意义。这个时候,目的只有一个:最快改善性能,给开发人员重新设计、调整应用留出一定的时间。 这里不是细腻的微调,而是最粗旷的拉升。用最简单(可快速实施),变更最少(尽量避免变更引入新的 bug 和问题)的方法迅速改善 mysql 的性能。所以我这里的最快实践,不一定是最好的,不一定是最有效的,但是一定是最快能看到性能改善的方法。
MySQL InnoDB 隔离级别探索
概述 本文会简单介绍 Mysql 使用的支持事务的存储引擎 InnoDB 的隔离级别,以及每个隔离级别下回产生的并发问题。同时为了更加深刻的理解 InnoDB 引擎的隔离级别,还会探讨如何通过加锁解决不同隔离级别下的并发问题。本文使用的实验环境是 mysql-5.1.33-win32,其他版本的 MySQL 可能会有不同。
MYSQL 存储过程中,中文变量出现乱码的解决办法
昨天下班前发现有个存储过程有问题,无法正确的查询数据。 数据表和字段都是 utf8 存储的中文内容。在连接数据库后也使用 SET NAMES utf8; 设置了编码。但是在存储过程中无法查询中文内容的字段。由于一些逻辑处理的原因,存储过程使用了游标,同时定义了一些局部变量。