Yuan_Tuo
Yuan_Tuo

MySQL 大小写敏感的坑

遇到的坑

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

https://blog.imwcr.cn/wp-content/uploads/2023/01/image.png
数据表结构

如上图所示,username的字符集被设置成了utf8_general_ci,即Unicode大小写不敏感。这也是MySQL默认的设置,但用户名作为区分用户的重要参数,大小写不敏感自然会出现很多意外的bug。

比如这次就是因为这个问题导致对该用户的操作未生效,用户注册时使用的是全大写,而登录时使用的是全小写,因为大小写不敏感,导致检验时通过。

但对用户的操作是通过Redis实现,而该操作是区分大小写的,因此发现了此bug。

如果此bug被利用,将导致对用户操作记录等失效,权限管理等失效。

bug修复

将表的字符集(排序规则)修改为utf8-bin即可区分大小写。

但原先重名导致的错误数据却需要人工修复,这就取决于数据量的多少和用户的习惯了。

(理想中可以写个脚本修复,但项目中遇到的情况是部分数据丢失了,那也就只能手动修复了)

发表回复

textsms
account_circle
email

Yuan_Tuo

MySQL 大小写敏感的坑
遇到的坑 大小写的问题经常被忽略,但这次我在项目中遇到的问题就和大小写有关。 数据表结构 如上图所示,username的字符集被设置成了utf8_general_ci,即Unicode大小写不敏感。…
扫描二维码继续阅读
2023-01-15