近期,一直在忙着写一个小小的个人博客项目,在实现“全局搜索” 功能时,一直想让“全局搜索” 功能实现**“区分大小写”**,方法介绍如下:
(在本小白的另外一篇博客中,介绍的比较详细,有兴趣的可以看一下:mysql模糊查询语句是否区分大小写?)
方法一:
设置“COLLATE”属性值为“utf8”,mysql采用utf8编码格式,模糊查询不区分大小写
方法二:
在创建表的时候,指定表字段COLLATE 为“utf8_bin”,或者修改指定表字段COLLATE 为“utf8_bin”;即,单独指定所需字段(比如,在此处 我所需要不区分大小写的字段为表 ‘t_blog’ 中的 ‘title’ 字段)为 ‘utf8’ 编码格式,COLLATE 为“utf8_bin”:
altertable t_blog CHANGE`title``title`varchar(255)CHARACTERSET utf8COLLATE utf8_binNULLDEFAULTNULL;
altertable`t_blog`modifycolumn`title`varchar(255)CHARACTERSET utf8COLLATE utf8_binNULLDEFAULTNULL;
(选择其中一种修改方法既可)
方法三
修改字段为BINARY:
altertable t_blog CHANGE`title``title`varchar(255)BINARYNULLDEFAULTNULL;
altertable`t_blog`modifycolumn`title`varchar(255)BINARYNULLDEFAULTNULL;
两种修改方式选择一种既可
方法四
- 查询语句字段前面加BINARY:
select*from`t_blog`whereBINARY`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-- ----------------------------DROPTABLEIFEXISTS`t_blog`;CREATETABLE`t_blog`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`appreciation`bit(1)NOTNULL,`comment_tabled`bit(1)NOTNULL,`content`longtextCHARACTERSET utf8COLLATE utf8_binNULL,`create_time`datetime(0)NULLDEFAULTNULL,`first_picture`varchar(255)CHARACTERSET utf8COLLATE utf8_binNULLDEFAULTNULL,`flag`varchar(255)CHARACTERSET utf8COLLATE utf8_binNULLDEFAULTNULL,`published`bit(1)NOTNULL,`recommend`bit(1)NOTNULL,`share_statement`bit(1)NOTNULL,`title`varchar(255)CHARACTERSET utf8COLLATE utf8_binNULLDEFAULTNULL,`update_time`datetime(0)NULLDEFAULTNULL,`views`int(11)NULLDEFAULTNULL,`type_id`bigint(20)NULLDEFAULTNULL,`user_id`bigint(20)NULLDEFAULTNULL,`description`varchar(255)CHARACTERSET utf8COLLATE utf8_binNULLDEFAULTNULL,PRIMARYKEY(`id`)USINGBTREE,INDEX`FK292449gwg5yf7ocdlmswv9w4j`(`type_id`)USINGBTREE,INDEX`FK8ky5rrsxh01nkhctmo7d48p82`(`user_id`)USINGBTREE,CONSTRAINT`FK292449gwg5yf7ocdlmswv9w4j`FOREIGNKEY(`type_id`)REFERENCES`t_type`(`id`)ONDELETERESTRICTONUPDATERESTRICT,CONSTRAINT`FK8ky5rrsxh01nkhctmo7d48p82`FOREIGNKEY(`user_id`)REFERENCES`t_user`(`id`)ONDELETERESTRICTONUPDATERESTRICT)ENGINE=InnoDBAUTO_INCREMENT=14CHARACTERSET= utf8COLLATE= utf8_bin ROW_FORMAT= Dynamic;
数据库内容
查询结果
- select * from
t_blog
wheretitle
like ‘%html%’; - select * from
t_blog
wheretitle
like ‘%HTML%’;
结论:
mysql采用utf8编码格式,模糊查询区分大小写
解决方法二
方法
单独指定所需字段(比如,在此处 我所需要区分大小写的字段为表 ‘t_blog’ 中的 ‘title’ 字段)为 ‘utf8’ 编码格式,COLLATE 为“utf8_bin”;
altertable t_blog CHANGE`title``title`varchar(255)CHARACTERSET utf8COLLATE utf8_binNULLDEFAULTNULL;
altertable`t_blog`modifycolumn`title`varchar(255)CHARACTERSET utf8COLLATE utf8_binNULLDEFAULTNULL;
结论
- select * from
t_blog
wheretitle
like ‘%HTML%’; - select * from
t_blog
wheretitle
like ‘%html%’;
由上述执行结果可以看出,单独修改指定所需字段(比如,在此处 我所需要区分大小写的字段为表 ‘t_blog’ 中的 ‘title’ 字段)为 ‘utf8’ 编码格式,COLLATE 为“utf8_bin”,可以使模糊查询语句区分大小写;
解决方法三
方法
- 如图所示,当前 ‘t_blog’ 表格的 ‘title’ 字段的 COLLATE 为 ‘utf8mb4_general_ci’ ,不区分大小写
- 修改字段为BINARY:
altertable t_blog CHANGE`title``title`varchar(255)BINARYNULLDEFAULTNULL;
altertable`t_blog`modifycolumn`title`varchar(255)BINARYNULLDEFAULTNULL;
两种修改方式选择一种既可
结论
- select * from
t_blog
wheretitle
like ‘%HTML%’; - select * from
t_blog
wheretitle
like ‘%html%’;
由上述执行结果可以看出,修改字段为BINARY,可以使模糊查询语句区分大小写;
解决办法四
方法
- 如图所示,当前 ‘t_blog’ 表格的 ‘title’ 字段的 COLLATE 为 ‘utf8mb4_general_ci’ ,不区分大小写
- 查询语句字段前面加BINARY:
select*from`t_blog`whereBINARY`title`like'%html%';
结论
select * from
t_blog
wheretitle
like ‘%html%’;select * from
t_blog
where BINARYtitle
like ‘%html%’;
由上述执行结果可以看出,在查询语句字段前面加BINARY,可以使模糊查询语句区分大小写。
本小白还有很多地方讲解的不够清楚明了,还请各位大佬指教!想更深入了解的可以参考大佬的博客(膜拜膜拜)mysql区分大小写