mysql模糊查询语句区分大小写

Posted 劭兮劭兮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql模糊查询语句区分大小写相关的知识,希望对你有一定的参考价值。

在这里插入图片描述
近期,一直在忙着写一个小小的个人博客项目,在实现 “全局搜索” 功能时,一直想让 “全局搜索” 功能实现**“区分大小写”**,方法介绍如下:
(在本小白的另外一篇博客中,介绍的比较详细,有兴趣的可以看一下:mysql模糊查询语句是否区分大小写?

方法一:

设置“COLLATE”属性值为“utf8”,mysql采用utf8编码格式,模糊查询不区分大小写

方法二:

在创建表的时候,指定表字段COLLATE 为“utf8_bin”,或者修改指定表字段COLLATE 为“utf8_bin”;即,单独指定所需字段(比如,在此处 我所需要不区分大小写的字段为表 ‘t_blog’ 中的 ‘title’ 字段)为 ‘utf8’ 编码格式,COLLATE 为“utf8_bin”:

alter table t_blog CHANGE `title` `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL;
alter table `t_blog` modify column `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL;

(选择其中一种修改方法既可)

方法三

修改字段为BINARY:

alter table t_blog CHANGE `title` `title` varchar(255) BINARY NULL DEFAULT NULL;
alter table `t_blog` modify column `title` varchar(255) BINARY NULL DEFAULT NULL;

两种修改方式选择一种既可

方法四

  • 查询语句字段前面加BINARY:
select * from `t_blog` where BINARY `title` like '%html%';

还有一种修改mysql配置文件my.ini的方法,本小白非常不推荐此方法,所以在此不再介绍,有兴趣的小伙伴们可以了解一下:
mysql模糊查询语句是否区分大小写?

下面,对上述方法进行详细介绍:

解决方法一

如图所示,为了便于区分,让小伙伴们更好地理解,在此,本小白建立了两个一模一样的数据库,其中一个采用utf8编码格式,另外一个采用utf8mb4格式:
在这里插入图片描述

在这里插入图片描述

建表语句采用utf8编码格式:

建表语句
  • blog_test : utf8编码格式
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for t_blog
-- ----------------------------
DROP TABLE IF EXISTS `t_blog`;
CREATE TABLE `t_blog`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `appreciation` bit(1) NOT NULL,
  `comment_tabled` bit(1) NOT NULL,
  `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NULL,
  `create_time` datetime(0) NULL DEFAULT NULL,
  `first_picture` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `flag` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `published` bit(1) NOT NULL,
  `recommend` bit(1) NOT NULL,
  `share_statement` bit(1) NOT NULL,
  `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `update_time` datetime(0) NULL DEFAULT NULL,
  `views` int(11) NULL DEFAULT NULL,
  `type_id` bigint(20) NULL DEFAULT NULL,
  `user_id` bigint(20) NULL DEFAULT NULL,
  `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `FK292449gwg5yf7ocdlmswv9w4j`(`type_id`) USING BTREE,
  INDEX `FK8ky5rrsxh01nkhctmo7d48p82`(`user_id`) USING BTREE,
  CONSTRAINT `FK292449gwg5yf7ocdlmswv9w4j` FOREIGN KEY (`type_id`) REFERENCES `t_type` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
  CONSTRAINT `FK8ky5rrsxh01nkhctmo7d48p82` FOREIGN KEY (`user_id`) REFERENCES `t_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

在这里插入图片描述

数据库内容

在这里插入图片描述

查询结果
  • select * from t_blog where title like ‘%html%’;在这里插入图片描述
  • select * from t_blog where title like ‘%HTML%’;在这里插入图片描述
结论:

mysql采用utf8编码格式,模糊查询区分大小写

解决方法二

方法

单独指定所需字段(比如,在此处 我所需要区分大小写的字段为表 ‘t_blog’ 中的 ‘title’ 字段)为 ‘utf8’ 编码格式,COLLATE 为“utf8_bin”;
在这里插入图片描述

alter table t_blog CHANGE `title` `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL;
alter table `t_blog` modify column `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL;
结论
  • select * from t_blog where title like ‘%HTML%’;
    在这里插入图片描述
  • select * from t_blog where title like ‘%html%’;
    在这里插入图片描述
    由上述执行结果可以看出,单独修改指定所需字段(比如,在此处 我所需要区分大小写的字段为表 ‘t_blog’ 中的 ‘title’ 字段)为 ‘utf8’ 编码格式,COLLATE 为“utf8_bin”,可以使模糊查询语句区分大小写

解决方法三

方法
  • 如图所示,当前 ‘t_blog’ 表格的 ‘title’ 字段的 COLLATE 为 ‘utf8mb4_general_ci’ ,不区分大小写
    在这里插入图片描述
  • 修改字段为BINARY:
    在这里插入图片描述
alter table t_blog CHANGE `title` `title` varchar(255) BINARY NULL DEFAULT NULL;
alter table `t_blog` modify column `title` varchar(255) BINARY NULL DEFAULT NULL;

两种修改方式选择一种既可

结论
  • select * from t_blog where title like ‘%HTML%’;
    在这里插入图片描述
  • select * from t_blog where title like ‘%html%’;
    在这里插入图片描述
    由上述执行结果可以看出,修改字段为BINARY,可以使模糊查询语句区分大小写

解决办法四

方法
  • 如图所示,当前 ‘t_blog’ 表格的 ‘title’ 字段的 COLLATE 为 ‘utf8mb4_general_ci’ ,不区分大小写
    在这里插入图片描述
  • 查询语句字段前面加BINARY:
select * from `t_blog` where BINARY `title` like '%html%';
结论
  • select * from t_blog where title like ‘%html%’;
    在这里插入图片描述

  • select * from t_blog where BINARY title like ‘%html%’;
    在这里插入图片描述

由上述执行结果可以看出,在查询语句字段前面加BINARY,可以使模糊查询语句区分大小写

本小白还有很多地方讲解的不够清楚明了,还请各位大佬指教!想更深入了解的可以参考大佬的博客(膜拜膜拜)mysql区分大小写

以上是关于mysql模糊查询语句区分大小写的主要内容,如果未能解决你的问题,请参考以下文章

mysql模糊查询语句怎么不区分大小写

SQL语句中模糊查询中不区分大小写怎么写?如:select × from table where number like‘%PK%’

mysql模糊查询区分大小写的问题~~

mysql模糊查询区分大小写

oracle 模糊查询 模糊大小写

Oracle 如可控制查询不区分大小写?