数据库大小写不敏感后,值也不敏感了

现象:我有一个账号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,导入新库

猜你喜欢

转载自blog.csdn.net/myfmyfmyfmyf/article/details/128495265