今天公司测试了这么一个bug--- 登录时,英文用户名未做大小写校验,也就是说,前台页面登录名无论输入大小写,都能正常登录
经过排查(当然是百度了),发现问题出现的的原因为COLLATE的设置,具体这个如何设置,各个设置的区别,放到下一篇文章中去讲解。
公司数据库设置字符核对规则是utf8_general_ci,这个的意思是忽视大小写,也就是说对于数据库来说,AAA和aaa是一视同仁的。
问题原因找到了,那就只剩解决了,发现普遍都是两种解决办法:
1. 修改查询sql,在字段名前边加binary
select * from usertable where binary yh_dlm = 'AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h';
2. 修改数据库字段设置
(1)如果是新创建的表、创表时候这么创建
create table table_name {
yh_dlm varchar(32) binary;
}
(2)如果像我们这种,项目已经进行开发甚至上线了,可以这么做
ALTER TABLE `f_yh` MODIFY COLUMN yh_dlm VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
下篇文章将具体讲解mysql-COLLATE的一些配置和使用