欢迎投稿

今日深度:

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

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


目录
  • 场景
  • 解决
    • 方法一:更换数据库字符集
    • 方法二:修改SQL
  • 总结

    场景

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

    (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查询不区分大小写内容请搜索PHP之友以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP之友!

    您可能感兴趣的文章:
    • MYSQL关联关系查询方式
    • mysql数据库您要的常见日期查询方法总结
    • MySQL可直接使用的查询表的列信息(实现方案)
    • MySQL不使用子查询的原因及优化案例
    • Python中使用pymysql连接MySQL数据库进行数据查询
    • MYSQL中的简单查询

    www.htsjk.Com true http://www.htsjk.com/Mysql/48671.html NewsArticle MySQL查询不区分大小写的两种解决方式, 目录 场景 解决 方法一:更换数据库字符集 方法二:修改SQL 总结 场景 场景如下,一个简单的查询语句; (mapper方法) @Select("select * from tb_d...
    评论暂时关闭