读mysqlbinlog二三事

最近研究研究mysql,写个小程序读取一下MySQL的binlog日志,探究一下其中的结构,没想到这么困难,折腾了好几个晚上。

首先对于英文的mysql文档,期初看起来真是不习惯,其中的含义真是琢磨不同,以为是自己理解的失误导致程序出错,但实际上是c++方面太薄弱。

这里遇到了几个问题:

1.字节序

虽说网上的有一篇文章说是小端存储,但是实际上,读二进制的整数时,还是出了问题。这个问题好解决,自己转一下就OK了,但是有出现了一个新问题

2.char类型相加

因为char类型是c/c++编程语言的最小单位,所以提供的api都是以char为单位的,但是我们定义需要读的数的时候,定义成

char a = 0;

这样的话就有问题了,当赋值给int变量的时候,就会发生问题,此时已然保持了其有符号特性,如

char x = 155;

int y.= x;

这里,y是负数,而不是正数,为了能够正确得到结果,需要

char x = 155;

int y = (int)x;

这样就能得到准确的正数了。

这里能够看出,c++严格定义了有符号数的加法和无符号数的加法和赋值语句。精度有可能随着赋值的操作,或转型操作,导致符号丢失或保留。

原文地址:https://www.cnblogs.com/weiguangyue/p/14208302.html