数据库大小写不敏感后,值也不敏感了
现象:我有一个账号admin,结果莫名多了一个ADMIN、Admin、AdMin等一些列账号;细品你的密码就算密文签名,是不是在你不知情的情况下也有很多。原因:数据库安装的时候设置的大小写不敏感导致
现象:我有一个账号admin,结果莫名多了一个ADMIN、Admin、AdMin等一些列账号;细品你的密码就算密文签名,是不是在你不知情的情况下也有很多。
原因:数据库安装的时候设置的大小写不敏感导致
解决:建议第三种,给字段单独修改编码格式
1、重新开启大小写敏感
mysql5.7以前可以修改配置文件lower_case_table_names,但是mysql8需要安装的时候更改,谁爱动弹就改吧
2、查询条件增加 BINARY
在查询的sql中加入 BINARY 关键字,使用mysql 的 BINARY 关键字使搜索区分大小写。
select * from ep_r_user_login a where BINARY a.LOGIN_CODE='admin';
select * from ep_r_user_login a where BINARY a.LOGIN_CODE= upper('AdmiN');
这种方式也好累,要改好多
3、修改字段字符集为utf8_bin
将某个字段的字符集排序规则,修改为utf8_bin,哪个字段需要改哪个字段就行,比如登录和密码,那就只更改登录和密码的字段就可以。
alter table 表名 modify column 字段 varchar(32) COLLATE utf8_bin ;
具体为啥看这个:mysql 存储大小写不敏感_MySQL疑04---对数据库中存储数据大小写不敏感问题_weixin_39693437的博客-CSDN博客
字段值的大小写由mysql的校对规则来控制。提到校对规则,就不得不说字符集。字符集是一套符号和编码,校对规则是在字符集内用于比较字符的一套规则。 一般而言,校对规则以其相关的字符集名开始,通常包括一个语言名,并且以ci(大小写不敏感)、cs(大小写敏感)或_bin(二元)结束 。
比如 utf8字符集,,如下表:
1)utf8bin:utf8bin将字符串中的每一个字符用二进制数据存储,区分大小写。
2)utf8generalci:utf8generaci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。
3)utf8generalcs:utf8generalcs区分大小写,cs为case sensitive的缩写,即大小写敏感。
4、如果所有的都要更改,又不想重新安装数据库
(感觉没必要,一开始不区分大小写,后面区分返工量不少)导出数据库,新建一个新的库字符集为utf8_bin,导入新库
更多推荐
所有评论(0)