解决MySQl查询不区分大小写
问题
最近,在用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');
> 部分引用自文章:http://www.imooc.com/article/14190
注意:在我的这次项目中用的是hibernate框架,使用的并不是sql,而是hql语句,使用
from User where binary username = ? and binary password = ?;
结果报错,再试from User where username like binary(?) and password like binary(?);
才没有报错。原因暂时不知。
解决MySQl查询不区分大小写相关推荐
- mysql select 区分大小写,MySql查询不区分大小写解决方案(两种)
当我们输入不管大小写都能查询到数据,例如:输入 aaa 或者aaA ,AAA都能查询同样的结果,说明查询条件对大小写不敏感. 解决方案一: 于是怀疑Mysql的问题.做个实验:直接使用客户端用sql查 ...
- MySQL查询不区分大小写
解决MySQLl查询不区分大小写问题 MySQL默认查询是不区分大小写的,可以在查询是使用binary来实现区分大小写的查询操作 binary 区分大小写
- [已解决]mysql查询一周内的数据,解决一周的起始日期是从星期日(星期天|周日|周天)开始的问题
前言 今天又遇到很坑的问题了,因为外国友人每一周的起始日期是周日,跟我们的不一样,我们每一周的起始日期是星期一,这样导致我要用mysql统计一周的数据的时候,对于我们来说,查询的记录包括:上周日的记录 ...
- MySQL查询不区分大小写问题
现象 在使用MySQL字符串查询的时候遇到这么一个问题,查询没有区分大小写,如下图所示 查询name的时候,使用A去查询或者使用a去查询,结果是一样的. 限定讨论范围 仅讨论表的创建: 仅讨论表中列值 ...
- 使mysql查询条件区分大小写 数据库搜索中大小写敏感性
在默认情况下,mysql搜索不区分大小写(但某些字符集始终区分大小写,如czech).这意味着,如果你使用col_name LIKE 'a%'进行搜索,你将获得以A或a开始的所有列. 如果打算使搜索区 ...
- mysql update 几万 非常慢_如何解决mysql 查询和更新速度慢
在做客户关系管理系统的时候遇到联表查询,速度特别慢,导致页面加载时间过长而出现错误.在上网查询后发现建立索引可以优化查询 在没有建立索引的时候 select c.*,s.* from crm_cu_r ...
- oracle锁表查询_专业解决 MySQL 查询速度慢与性能差
Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注 什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSe ...
- 专业解决 MySQL 查询速度慢与性能差!
作者:唐立勇 https://segmentfault.com/a/1190000013672421 什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: Que ...
- 大牛出招|分分钟解决 MySQL 查询速度慢与性能差
点击▲关注 "数据和云" 给公众号标星置顶 更多精彩 第一时间直达 作者:唐立勇 https://segmentfault.com/a/1190000013672421 一.什 ...
最新文章
- atitit.userService 用户系统设计 v5 q330
- Octavia 的 HTTPS 与自建、签发 CA 证书
- 串口通信模块2:串口通信编程基础(打开、配置)
- zeppelin报错master is set as yarn, but spark.submit.deployMode is not specified
- matlab中float类型的_Java局部变量类型推断(Var类型)的26条细则
- 【初学线段树,看这篇文章准没错】线段树(单点修改and区间修改)acm寒假集训日记22/1/10
- 公众号里面套页面_微信公众号页面模板有什么用?开通的方法是什么?
- Flutter 图片选择器 SelectPhotoWidget
- django restframwork 教程之authentication权限
- 三、spring中高级装配(1)
- 编辑实测:迅捷PDF转换器怎么将PDF转换成JPG
- 数字电视标准大全DVB/ATSC/ISDB/CMMB/DMBTH/DAB
- 达梦数据库的表空间管理
- 24产品经理需要具备的用户动机分析能力
- 工作日志之Sonar扫描错误处理-Sonar扫描结果入库 java.sql.BatchUpdateException: Incorrect string value: '\xF3\xA3\xAC\xB
- 人工智能(1)-样本空间、假设空间、版本空间
- adb 命令模拟点击事件
- v-permission来做权限管理
- SVG排版点击可以输入内容
- RF-2 变量的基本使用
热门文章
- phpexcel常用操作
- 互联网+风口直吹传统银行能否漫步起舞
- 九江大桥被船撞垮塌,仅仅是意外么
- Idea设置JDK版本(在jdk版本超过java8时,使用Hutool工具包获取系统信息报错)
- UE高级性能剖析技术(1)-- RHI线程(渲染提交)
- 静态库和动态库的使用与区别
- hwclock设置日期_hwclock命令
- 程序员家的孩子休学是怎么书写休学申请书的
- 如何用计算机制作多媒体作品,用计算机创作多媒体作品教学反思.doc
- 【C语言程序】将字符串“Where there is a will,there is away.”保存到字符数组中,然后将其翻译成中文“有志者事竟成。”