最近发现短链接服务在生成短链接时经常会发生碰撞,刚开始单纯地以为是生成算法有问题,毕竟就算是4位的短链接也有62^4个链接可能(26个字母的大小写+10个数字),如果生成算法没问题的话发生碰撞的概率应该是较小的。
检查了一遍代码,生成算法也确实有一些问题,但都不是主要问题。今天随手在mysql里select了一下,发现查询的时候居然不区分大小写!那么其实4位的短链接就只有36^4个链接可能(160多万而已)!
查阅了mysql相关文档,大致了解了mysql字符集及校对规则的选取方式:
- 如果指定了字符集和校对规则,那么采用指定的字符集和校对规则。
- 如果指定了字符集但没有指定校对规则,那么采用指定的字符集和该字符集的默认校对规则。
- 否则,采用服务器字符集和服务器校对规则。
可以通过show collation命令查询支持的校对规则及字符集默认的校对规则。
mysql数据库也差不多支撑不住目前的需求了,反正要迁移到分布式数据库了就暂时不理这个问题了。但越来越觉得是应该好好完整地将mysql手册看一遍了。