当前位置: 首页 > article >正文

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

说明:偶然机会,发现一次查询匹配数据的时候没有区分大小写,如,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中,解决查询不区分大小写的两种方式


http://www.kler.cn/a/513578.html

相关文章:

  • 【回忆迷宫——处理方法+DFS】
  • C++ 类与对象(上)
  • mysql之表的外键约束
  • 三格电子——MODBUS TCP 转 CANOpen 协议网关
  • JavaScript系列(36)--微服务架构详解
  • 如何将自己本地项目开源到github上?
  • 【GORM】Hook钩子函数,Session会话函数讲解及使用案例
  • 【2025小年源码免费送】
  • OFD实现在线预览的几种方式
  • 计算机的错误计算(二百一十八)
  • 【Golang/gRPC/Nacos】在golang中将gRPC和Nacos结合使用
  • 刷题日记3
  • 天机学堂7--Redisson自定义注解AOP以及SPEL表达式实现分布式锁
  • 顽固性失眠怎么调理
  • InVideo AI技术浅析(五):生成对抗网络
  • centos下设置服务器开机自启动 redis
  • MongoDB实训:电子商务日志存储任务
  • leetcode 面试经典 150 题:插入区间
  • 音频入门(一):音频基础知识与分类的基本流程
  • AIGC视频生成模型:Stability AI的SVD(Stable Video Diffusion)模型
  • python+pygame+pytmx+map editor开发一个tiled游戏demo 05使用object层初始化player位置
  • 前端 window.print() 打印图片
  • 云知声语音识别技术:原理、突破与应用前景
  • Python数据可视化(够用版):懂基础 + 专业的图表抛给Tableau等专业绘图工具
  • 常用邮箱有哪些推荐的服务?
  • tcpdump 精准分析vxlan网络