MySQL查询不区分大小写的两种解决方式

 更新时间:2025年01月24日 10:31:01   作者:何中应  
偶然机会,发现一次查询匹配数据的时候没有区分大小写,如,username = ‘WangWu’,username = 'wangwu’的记录也被查出来,本文介绍解决这种情况的两种方式,并通过代码讲解的非常详细,需要的朋友可以参考下

场景

场景如下,一个简单的查询语句;

(mapper方法)

    @Select("select * from tb_demo where username = #{username} ")
    DemoDTO selectByUsername(String username);

(单元测试)

    @Test
    public void testSelectByUsername() {
        String username = "WangWu";
        DemoDTO demoDTO = demoMapper.selectByUsername(username);
        System.out.println(demoDTO);
    }

数据库数据,如下:

查询结果,没有区分大小写,wangwu的记录被查出来了;

解决

解决方式有两种,如下:

方法一:更换数据库字符集

在前面的demo中,数据库字符集是:utf8mb4_general_ci,表的字符集:utf8mb4_general_ci,ci,意思是case insensitive,大小写不敏感,不区分大小写。

可以考虑更改为 utf8mb4_bin,但是博主尝试修改现有数据库的字符集,还是不行,只有在创建表的时候就指定才行。故在以后创建数据库选定字符集时,需考虑业务是否有区分大小写的场景。

方法二:修改SQL

可以在SQL中,指定字符集比较。像上面的SQL,修改如下:

    @Select("select * from tb_demo where username = #{username} COLLATE utf8mb4_bin")
    DemoDTO selectByUsername(String username);

指定用 utf8mb4_bin字符集比较,就能区分大小写了,如下:

    @Test
    public void testSelectByUsername() {
        DemoDTO demoDTO1 = demoMapper.selectByUsername("WangWu");
        System.out.println("demoDTO1 = " + demoDTO1);

        DemoDTO demoDTO2 = demoMapper.selectByUsername("wangwu");
        System.out.println("demoDTO2 = " + demoDTO2);
    }

查询结果:

总结

本文介绍了在MySQL中,解决查询不区分大小写的两种方式

到此这篇关于MySQL查询不区分大小写的两种解决方式的文章就介绍到这了,更多相关MySQL查询不区分大小写内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL中索引的创建及删除方法

    MySQL中索引的创建及删除方法

    MySQL中的索引是一种特殊的数据结构,它的主要目的是为了加快数据的检索速度,下面这篇文章主要给大家介绍了关于MySQL中索引的创建及删除的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • win2008下mysql8.0.11升级mysql8.0.17版本详细步骤

    win2008下mysql8.0.11升级mysql8.0.17版本详细步骤

    这篇文章主要为大家详细介绍了win2008下mysql8.0.11升级mysql8.0.17版本详细步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • MySQL详解进行JDBC编程与增删改查方法

    MySQL详解进行JDBC编程与增删改查方法

    JDBC是指Java数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。从根本上来说,JDBC 是一种规范,它提供了一套完整的接口,允许便携式访问到底层数据库
    2022-06-06
  • SQL如何获取目标时间点或日期的方法实例

    SQL如何获取目标时间点或日期的方法实例

    日期获取在我们日常开发中经常会遇到,这篇文章主要给大家介绍了关于SQL如何获取目标时间点或日期的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • mysql中如何按分组添加序号

    mysql中如何按分组添加序号

    这篇文章主要介绍了mysql中如何按分组添加序号问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 验证mysql是否安装成功的方法

    验证mysql是否安装成功的方法

    在本篇文章里小编给大家分享的是关于验证mysql是否安装成功的方法,需要的朋友们可以学习下。
    2020-06-06
  • win10下安装mysql8.0.23 及 “服务没有响应控制功能”问题解决办法

    win10下安装mysql8.0.23 及 “服务没有响应控制功能”问题解决办法

    这篇文章主要介绍了win10下安装mysql8.0.23 及 “服务没有响应控制功能”问题解决办法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 手把手教你Navicat如何导出Excel格式的表结构

    手把手教你Navicat如何导出Excel格式的表结构

    我们在开发中使用数据库时往往需要做一些备份之类的,或者需要导出下表结构导入到其他数据库等,下面这篇文章主要给大家介绍了关于Navicat如何导出Excel格式的表结构的相关资料,需要的朋友可以参考下
    2023-04-04
  • 解压版MYSQL安装及遇到的错误及解决方法

    解压版MYSQL安装及遇到的错误及解决方法

    这篇文章主要介绍了解压版MYSQL安装及遇到的错误及解决方法,需要的朋友可以参考下
    2018-11-11
  • mysql中的各种约束条件深入探讨

    mysql中的各种约束条件深入探讨

    在mysql中对编辑的数据进行类型的限制,不满足约束条件的报错,本文给大家分享mysql中的各种约束条件,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-05-05

最新评论