mysql 存储大小写不敏感_MySQL疑04---对数据库中存储数据大小写不敏感问题

一、问题描述

当写python用户登录与注册功能,连接数据库时发现,当用户名不同时,也会显示用户已存在。

08a4b8ca5fd0fea4ed2b7378c1db9531.png

612402c3f64b45cb2a6a86c37118a32a.png

这是因为当数据库中,数据默认不区分大小写。那我们在账号密码这种识别的状态下,是需要区分大小写的,我们该怎么做呢?

二、解决方案

2.1 BINARY关键字

因为默认情况下字段内容是不区分大小写的,也即大小写不敏感。所以解决方案就是要新增字段内容的校验规则。

使用mysql 的 BINARY 关键字使搜索区分大小写。

在查询的sql中加入 BINARY 关键字

如上述代码中:可以将查询sql语句改写,加入BINARY关键字

check_sql = 'select name from user where BINARY name =%s ' # 加入BINARY关键字,可使查询结果区分大小写

check_sql = 'select name from user where name =%s ' # 这种查询无法区分大小写

2.2 建表时就进行限制

collate:核对,校勘,对照(不同来源的信息); 整理(文件或书等);

此处即改为以二进制来校核,可区分大小写

mysql> create table t3(

id int primary key auto_increment comment'用户id',

user varchar(50) BINARY not null comment'用户名'

)engine=innodb charset =utf8 comment='用户表';

Query OK, 0 rows affected (0.04 sec)

4d3b8251e68646e4ec95ddb5bfc30459.png

mysql> create table t5(

id int primary key auto_increment comment'用户id',

user varchar(50) not null comment'用户名'

)engine=innodb default charset =utf8 collate=utf8_bin comment='用户表';

68864720313f96e3112f9d566ff78b07.png

总结:这两种查看表的详情,本质上都是 在字段上 加上了 COLLATE utf8_bin。

总结:

字段值的大小写由mysql的校对规则来控制。提到校对规则,就不得不说字符集。字符集是一套符号和编码,校对规则是在字符集内用于比较字符的一套规则。 一般而言,校对规则以其相关的字符集名开始,通常包括一个语言名,并且以ci(大小写不敏感)、cs(大小写敏感)或_bin(二元)结束 。

比如 utf8字符集,,如下表:

1)utf8bin:utf8bin将字符串中的每一个字符用二进制数据存储,区分大小写。

2)utf8generalci:utf8generaci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。

3)utf8generalcs:utf8generalcs区分大小写,cs为case sensitive的缩写,即大小写敏感。

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值