解决MySQl查询不区分大小写的方法讲解
作者:Veir_dev 发布时间:2024-01-12 13:49:51
问题
最近,在用SSH框架完成一个实践项目时,碰到了一个莫名其妙的Bug困扰了我好久,最后终于解决,记录如下。
问题:同学在测试系统的时候突然发现,数据库保存的账户本来应该是admin,结果该同学用Admin账户居然登录成功了……
……EXM???这样也行?好吧,我还是查找这个Bug发生的原因吧。然后就是各种排查程序的过程,找来找去也没发现什么问题。终于想到,不用hql,自己写sql语句在数据库里面直接查询试试,结果果然发现了问题所在:
select * from user where username = 'admin' and password = 'admin';
select * from user where username = 'Admin' and password = 'admin';
用上面的两条sql语句分表查询,出来的结果居然是一样的!……!!去搜索引擎搜索关键词:MySQL 查询 大小写,果然找到问题了!MySQL查询是不区分大小写的!这可真的是惊呆我了,虽然知道一般情况下,关键字是不区分大小写的,但是没想到连要查询的参数都是不区分大小写的!!再尝试下面的sql语句,果然还是一样的结果。
select * from user where username = 'ADMIN' and password = 'admin';
解决方案
网上搜索到一篇相关的文章,写的挺好的,这里直接贴上该文章解释吧:
Mysql默认的字符检索策略:utf8_general_ci,表示不区分大小写;utf8_general_cs表示区分大小写,utf8_bin表示二进制比较,同样也区分大小写 。(注意:在Mysql5.6.10版本中,不支持utf8_genral_cs!!!!)
创建表时,直接设置表的collate属性为utf8_general_cs或者utf8_bin;如果已经创建表,则直接修改字段的Collation属性为utf8_general_cs或者utf8_bin。
-- 创建表:
CREATE TABLE testt(
id INT PRIMARY KEY,
name VARCHAR(32) NOT NULL
) ENGINE = INNODB COLLATE =utf8_bin;
-- 修改表结构的Collation属性
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
直接修改sql语句,在要查询的字段前面加上binary
关键字即可。
-- 在每一个条件前加上binary关键字
select * from user where binary username = 'admin' and binary password = 'admin';
-- 将参数以binary('')包围
select * from user where username like binary('admin') and password like binary('admin');
注意:在我的这次项目中用的是hibernate框架,使用的并不是sql,而是hql语句,使用
from User where binary username = ? and binary password = ?;
结果报错,再试from User where username like binary(?) and password like binary(?);
才没有报错。原因暂时不知。
来源:https://blog.csdn.net/Veir_123/article/details/73730751


猜你喜欢
- Golang多线程刷票的实现代码直接用Go语言来写下刷票。package mainimport ("fmt" "
- 前言大家在做数据抓取的时候,经常遇到由于网络问题导致的程序保存,先前只是记录了错误内容,并对错误内容进行后期处理。原先的流程:def cra
- 建立好如下的存储过程,以后要分页,直接调用改存储过程就可以了。 注意:数据量大、性能要求高的,请个性化处理。 ALTER PROCEDURE
- 1、用户管理mysql的用户信息保存在了mysql.user中:select * from mysql.user\G************
- counter 是一种特殊的字典,主要方便用来计数,key 是要计数的 item,value 保存的是个数。from collections
- 前几篇都是手动录入或随机函数产生的数据。实际有许多类型的文件,以及许多方法,用它们从文件中提取数据来图形化。比如之前python基础(12)
- Python 内置的 zipfile 模块可以对文件(夹)进行ZIP格式的压缩和读取操作。要进行相关操作,首先需要实例化一个 ZipFile
- 本文实例为大家分享了Python3实现汉语转换为汉语拼音的具体代码,供大家参考,具体内容如下工具: Python3.6.2,pycharm1
- 打开CMD命令 执行:sqlcmd/? 这是sqlcmd命令的一些帮助信息 通过上面可以知道怎么连数据库了 执行:sqlcmd -S 服务器
- 在使用mysql运行某些语句时,会因数据量太大而导致死锁,没有反映。这个时候,就需要kill掉某个正在消耗资源的query语句即可,KILL
- 本文实例讲述了python读写二进制文件的方法。分享给大家供大家参考。具体如下:初学python,现在要读一个二进制文件,查找doc只发现
- 包含Contains(s,substr string) bool判断s是否包含substr true:包含 false:不包含例子: &nb
- 最近在pythonTip做题的时候,遇到了deque模块,以前对其不太了解,现在特此总结一下deque模块是python标准库collect
- 线性回归实战使用PyTorch定义线性回归模型一般分以下几步: 1.设计网络架构 2.构建损失函数(loss)和优化器(optimizer)
- 操作系统:Ubuntu 17.04 64位MySQL版本:MySQL 5.7一、查看3306端口是否开放netstat -an|grep 3
- pytorch中基本的变量类型当属FloatTensor(以下都用floattensor),而Variable(以下都用variable)是
- 内容摘要:在网页制作中,有许多的术语,例如:CSS、HTML、DHTML、XHTML等等。在下面的文章中我们将会用到一些有关于HTML的基本
- HTTP Request的Header信息1、HTTP请求方式如下表:GET向Web服务器请求一个文件POST向Web服务器发送数据让Web
- 在网站中经常会生成表格,CSV和Excel都是常用的报表格式,CSV相对来说比较简单,如果大家有疑问我会相继发布一些CSV的实例,这里主要介
- tempfile.TemporaryFile如何你的应用程序需要一个临时文件来存储数据,但不需要同其他程序共享,那么用TemporaryFi