遇到的坑
大小写的问题经常被忽略,但这次我在项目中遇到的问题就和大小写有关。

如上图所示,username的字符集被设置成了utf8_general_ci,即Unicode大小写不敏感。这也是MySQL默认的设置,但用户名作为区分用户的重要参数,大小写不敏感自然会出现很多意外的bug。
比如这次就是因为这个问题导致对该用户的操作未生效,用户注册时使用的是全大写,而登录时使用的是全小写,因为大小写不敏感,导致检验时通过。
但对用户的操作是通过Redis实现,而该操作是区分大小写的,因此发现了此bug。
如果此bug被利用,将导致对用户操作记录等失效,权限管理等失效。
bug修复
将表的字符集(排序规则)修改为utf8-bin即可区分大小写。
但原先重名导致的错误数据却需要人工修复,这就取决于数据量的多少和用户的习惯了。
(理想中可以写个脚本修复,但项目中遇到的情况是部分数据丢失了,那也就只能手动修复了)
发表回复