解决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

标签:mysql,查询,不区分大小写
0
投稿

猜你喜欢

  • 如何基于Python实现数字类型转换

    2023-10-08 00:57:13
  • 特殊字符的json序列化总结大全

    2023-12-04 00:36:58
  • Python绘制散点密度图的三种方式详解

    2021-12-07 00:21:04
  • django 多数据库及分库实现方式

    2024-01-14 01:13:00
  • 解决Mac安装scrapy失败的问题

    2022-12-26 10:28:32
  • python-docx 页面设置详解

    2021-12-06 03:42:02
  • 通过MySQL日志实时查看执行语句以及更新日志的教程

    2024-01-17 03:57:10
  • python中pyplot直方图的绘制方式

    2023-11-20 07:58:17
  • Python使用Matplotlib实现Logos设计代码

    2021-02-04 19:18:34
  • 基于Vue实现页面切换左右滑动效果

    2023-07-02 16:55:10
  • Python更换pip源方法过程解析

    2022-01-20 08:00:58
  • Python实现常见数据格式转换的方法详解

    2023-04-16 03:48:16
  • Golang中interface的基本用法详解

    2023-07-14 17:00:33
  • Python collections.deque双边队列原理详解

    2022-02-21 04:25:00
  • thinkPHP中配置的读取与C方法详解

    2023-11-14 17:12:35
  • 微信小程序使用Vant Weapp组件库的方法步骤

    2023-09-11 15:17:34
  • 点球小游戏python脚本

    2022-07-17 23:28:03
  • django用户注册、登录、注销和用户扩展的示例

    2021-09-09 13:11:05
  • 用JS实现一个页面两份样式表

    2008-07-23 12:37:00
  • 百度首席设计师 用户体验部总监郭宇演讲

    2008-09-03 12:41:00
  • asp之家 网络编程 m.aspxhome.com