解决MySQl查询不区分大小写的方法讲解

 更新时间:2019年04月08日 09:10:04   作者:Veir_dev  
今天小编就为大家分享一篇关于解决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');

注意:在我的这次项目中用的是hibernate框架,使用的并不是sql,而是hql语句,使用 from User where binary username = ? and binary password = ?;结果报错,再试 from User where username like binary(?) and password like binary(?);才没有报错。原因暂时不知。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • MySQL开放远程连接权限的两种方法

    MySQL开放远程连接权限的两种方法

    在我们使用mysql数据库时,有时我们的程序与数据库不在同一机器上,这时我们需要远程访问数据库,下面这篇文章主要给大家介绍了关于MySQL开放远程连接权限的两种方法,需要的朋友可以参考下
    2022-06-06
  • SQL实现LeetCode(177.第N高薪水)

    SQL实现LeetCode(177.第N高薪水)

    这篇文章主要介绍了SQL实现LeetCode(177.第N高薪水),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • IOS 数据库升级数据迁移的实例详解

    IOS 数据库升级数据迁移的实例详解

    这篇文章主要介绍了IOS 数据库升级数据迁移的实例详解的相关资料,这里提供实例帮助大家解决数据库升级及数据迁移的问题,需要的朋友可以参考下
    2017-07-07
  • mySQL中LEN()与DATALENGTH()的区别

    mySQL中LEN()与DATALENGTH()的区别

    LEN返回指定字符串表达式的字符数,其中不包含尾随空格。DATALENGTH返回用于表示任何表达式的字节数。
    2011-03-03
  • mysql怎么设置最大连接数详解

    mysql怎么设置最大连接数详解

    这篇文章主要给大家介绍了关于mysql怎么设置最大连接数的相关资料,设置mysql最大连接数的方法,首先打开mysql的控制台,然后输入语句set GLOBAL max_connections=1000;即可直接设置最大连接数,需要的朋友可以参考下
    2022-02-02
  • 深入探究Mysql模糊查询是否区分大小写

    深入探究Mysql模糊查询是否区分大小写

    这篇文章主要给大家介绍了关于Mysql模糊查询是否区分大小写的相关资料,文中给出了5种解决方法以及各个方法的建议,需要的朋友可以参考下
    2021-06-06
  • MySQL使用MD5加密算法进行数据加密功能

    MySQL使用MD5加密算法进行数据加密功能

    在现代的数据库应用中,数据的安全性和隐私性变得尤为重要,MySQL作为最流行的关系型数据库之一,提供了多种加密功能,允许用户对数据进行加密和解密操作,在这篇文章中,我们将深入探讨MySQL的加密功能,并重点介绍如何使用MD5加密算法进行加密,需要的朋友可以参考下
    2024-12-12
  • mysql缺少my.ini文件的最佳解决方法

    mysql缺少my.ini文件的最佳解决方法

    my.ini是MySQL数据库中使用的配置文件,修改这个文件可以达到更新配置的目的,下面这篇文章主要给大家介绍了关于mysql缺少my.ini文件的最佳解决方法,需要的朋友可以参考下
    2024-01-01
  • MySQL 中行转列的方法

    MySQL 中行转列的方法

    这篇文章主要介绍了MySQL 中行转列的方法,帮助大家更好的理解和学习MySQL的使用,感兴趣的朋友可以了解下
    2020-12-12
  • CentOS 7下安装与配置MySQL 5.7

    CentOS 7下安装与配置MySQL 5.7

    Mysql5.7和之前版本的MySQL有一些不同,现把CentOS 7下MySQL 5.7安装、配置完整过程记下来,或许对新手来说有用。希望大家能够喜欢
    2018-01-01

最新评论