1、max_allowed_packet问题

当MySQL客户端或mysqld服务器收到大于max_allowed_packet字节的信息包时,将发出“信息包过大”错误,并关闭连接。对于某些客户端,如果通信信息包过大,在执行查询期间,可能会遇到“丢失与MySQL服务器的连接”错误。

客户端和服务器均有自己的max_allowed_packet变量,因此,如你打算处理大的信息包,必须增加客户端和服务器上的该变量。一般情况下,服务器默认max-allowed-packet为1MB

2、group最大长度

我们现在的项目,读写量真的很大。都是以万为单位。所以有一种数据我是用group_concat()来对数据进行重排

结果就是不全,特别奇怪,花了好久查来查去终于发现了一个巨坑,那就是group_concat()有长度限制1024。

解决方法:

windows下在my.ini加上group_concat_max_len = 10240(一个你自己设置的值)

linux在mysql.cof中加上group_concat_max_len =10240(一个你自己设置的值)

3、查询大小写敏感问题

我们最近在做的项目,运行一个线程,要去库里查一万多条记录,还是跨三个表联查,效率非常低要花5秒左右。

但是在前几天的运行测试中,我发现,只从主表取出来的数据,和主表left join两个子表。条数竟然不一样!

赶快百度发现,那是因为左表和右表有多条重复匹配。

我心想这是不可能的,别说重复匹配了,匹配条件的字段都是不可重复的。这一万多条数据都是有精确排序的,这下可慌死我了。那是因为什么呢...

找bug的过程是漫长而又痛苦的,而且是从整张表二十多万条记录里找。

查重复记录后,我发现有个值是"HX",另一个是'hx'。mysql竟然认为这两个玩意是一样的。

百度后发现,设置大小写敏感的方法,这里我不赘述了,大家自行百度,我这里说一个最简单的方法。设计表的时候,字段的字符集设置成“utf8-bin”