问题

最近,在用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';

解决方案

网上搜索到一篇相关的文章,写的挺好的,这里直接贴上该文章解释吧:

  1. 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;
  1. 直接修改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查询不区分大小写相关推荐

  1. mysql select 区分大小写,MySql查询不区分大小写解决方案(两种)

    当我们输入不管大小写都能查询到数据,例如:输入 aaa 或者aaA ,AAA都能查询同样的结果,说明查询条件对大小写不敏感. 解决方案一: 于是怀疑Mysql的问题.做个实验:直接使用客户端用sql查 ...

  2. MySQL查询不区分大小写

    解决MySQLl查询不区分大小写问题 MySQL默认查询是不区分大小写的,可以在查询是使用binary来实现区分大小写的查询操作 binary 区分大小写

  3. [已解决]mysql查询一周内的数据,解决一周的起始日期是从星期日(星期天|周日|周天)开始的问题

    前言 今天又遇到很坑的问题了,因为外国友人每一周的起始日期是周日,跟我们的不一样,我们每一周的起始日期是星期一,这样导致我要用mysql统计一周的数据的时候,对于我们来说,查询的记录包括:上周日的记录 ...

  4. MySQL查询不区分大小写问题

    现象 在使用MySQL字符串查询的时候遇到这么一个问题,查询没有区分大小写,如下图所示 查询name的时候,使用A去查询或者使用a去查询,结果是一样的. 限定讨论范围 仅讨论表的创建: 仅讨论表中列值 ...

  5. 使mysql查询条件区分大小写 数据库搜索中大小写敏感性

    在默认情况下,mysql搜索不区分大小写(但某些字符集始终区分大小写,如czech).这意味着,如果你使用col_name LIKE 'a%'进行搜索,你将获得以A或a开始的所有列. 如果打算使搜索区 ...

  6. mysql update 几万 非常慢_如何解决mysql 查询和更新速度慢

    在做客户关系管理系统的时候遇到联表查询,速度特别慢,导致页面加载时间过长而出现错误.在上网查询后发现建立索引可以优化查询 在没有建立索引的时候 select c.*,s.* from crm_cu_r ...

  7. oracle锁表查询_专业解决 MySQL 查询速度慢与性能差

    Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注 什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSe ...

  8. 专业解决 MySQL 查询速度慢与性能差!

    作者:唐立勇 https://segmentfault.com/a/1190000013672421 什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: Que ...

  9. 大牛出招|分分钟解决 MySQL 查询速度慢与性能差

    点击▲关注 "数据和云"   给公众号标星置顶 更多精彩 第一时间直达 作者:唐立勇 https://segmentfault.com/a/1190000013672421 一.什 ...

最新文章

  1. atitit.userService 用户系统设计 v5 q330
  2. Octavia 的 HTTPS 与自建、签发 CA 证书
  3. 串口通信模块2:串口通信编程基础(打开、配置)
  4. zeppelin报错master is set as yarn, but spark.submit.deployMode is not specified
  5. matlab中float类型的_Java局部变量类型推断(Var类型)的26条细则
  6. 【初学线段树,看这篇文章准没错】线段树(单点修改and区间修改)acm寒假集训日记22/1/10
  7. 公众号里面套页面_微信公众号页面模板有什么用?开通的方法是什么?
  8. Flutter 图片选择器 SelectPhotoWidget
  9. django restframwork 教程之authentication权限
  10. 三、spring中高级装配(1)
  11. 编辑实测:迅捷PDF转换器怎么将PDF转换成JPG
  12. 数字电视标准大全DVB/ATSC/ISDB/CMMB/DMBTH/DAB
  13. 达梦数据库的表空间管理
  14. 24产品经理需要具备的用户动机分析能力
  15. 工作日志之Sonar扫描错误处理-Sonar扫描结果入库 java.sql.BatchUpdateException: Incorrect string value: '\xF3\xA3\xAC\xB
  16. 人工智能(1)-样本空间、假设空间、版本空间
  17. adb 命令模拟点击事件
  18. v-permission来做权限管理
  19. SVG排版点击可以输入内容
  20. RF-2 变量的基本使用

热门文章

  1. phpexcel常用操作
  2. 互联网+风口直吹传统银行能否漫步起舞
  3. 九江大桥被船撞垮塌,仅仅是意外么
  4. Idea设置JDK版本(在jdk版本超过java8时,使用Hutool工具包获取系统信息报错)
  5. UE高级性能剖析技术(1)-- RHI线程(渲染提交)
  6. 静态库和动态库的使用与区别
  7. hwclock设置日期_hwclock命令
  8. 程序员家的孩子休学是怎么书写休学申请书的
  9. 如何用计算机制作多媒体作品,用计算机创作多媒体作品教学反思.doc
  10. 【C语言程序】将字符串“Where there is a will,there is away.”保存到字符数组中,然后将其翻译成中文“有志者事竟成。”