深入探究Mysql模糊查询是否区分大小写

这篇文章主要给大家介绍了关于Mysql模糊查询是否区分大小写的相关资料,文中给出了5种解决方法以及各个方法的建议,需要的朋友可以参考下

前言

近期,一直在忙着写一个小小的个人博客项目,在实现 “全局搜索” 功能时,发现mysql模糊查询语句有点儿神奇(本小白刚刚步入编程阶段,所以可能让大家见笑了,哈哈哈),有时候 mysql模糊查询语句区分大小写,有时候 mysql查询语句又不区分度大小写,于是,做了很多次实验,得出以下结论(可能有不对的地方,欢迎大佬们可以指出我的不足,也欢迎小伙伴们可以一起讨论问题!)

先来介绍一下collate,collate通常是和数据编码(charset)相关的,一般来说每种charset都有多种它所支持的collate,并且每种charset都指定一种collate为默认值。例如latin1编码的默认collate为latin1_swedish_ci,gbk编码的默认collate为gbk_chinese_ci,utf8mb4编码的默认值为utf8mb4_general_ci:

chsrset

collate

latin1latin1_swedish_ci
gbkgbk_chinese_ci
utf8mb4utf8mb4_general_ci
utf8utf8_bin

有兴趣的小伙伴,可以在navicate等数据库可视化工具中,自己尝试一下:

深入探究Mysql模糊查询是否区分大小写
深入探究Mysql模糊查询是否区分大小写
深入探究Mysql模糊查询是否区分大小写
深入探究Mysql模糊查询是否区分大小写

注意:mysql中有utf8和utf8mb4两种编码,但是mysql中的utf8最多只能支持3bytes长度的字符编码,所以,建议大家还是选择utf8mb4编码格式;

解决方法一

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

深入探究Mysql模糊查询是否区分大小写

区分大小写

深入探究Mysql模糊查询是否区分大小写

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

建表语句

blog_test : utf8编码格式

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

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;

深入探究Mysql模糊查询是否区分大小写

数据库内容

深入探究Mysql模糊查询是否区分大小写

查询结果 select * from t_blog where title like ‘%html%';

深入探究Mysql模糊查询是否区分大小写

select * from t_blog where title like ‘%html%';

深入探究Mysql模糊查询是否区分大小写

结论:

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

不区分大小写

深入探究Mysql模糊查询是否区分大小写

建表语句

建表语句也采用utf8mb4编码格式:

blog_test2 : utf8mb4编码格式

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

set names utf8mb4;

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 utf8mb4 collate utf8mb4_general_ci null,

`create_time` datetime(0) null default null,

`first_picture` varchar(255) character set utf8mb4 collate utf8mb4_general_ci null default null,

`flag` varchar(255) character set utf8mb4 collate utf8mb4_general_ci null default null,

`published` bit(1) not null,

`recommend` bit(1) not null,

`share_statement` bit(1) not null,

`title` varchar(255) character set utf8mb4 collate utf8mb4_general_ci 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 utf8mb4 collate utf8mb4_general_ci 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 = utf8mb4 collate = utf8mb4_general_ci row_format = dynamic;

深入探究Mysql模糊查询是否区分大小写

数据库内容

深入探究Mysql模糊查询是否区分大小写

查询结果 select * from t_blog where title like ‘%html%';

深入探究Mysql模糊查询是否区分大小写select

* from t_blog where title like ‘%html%';

深入探究Mysql模糊查询是否区分大小写

结论

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

解决方法二

区分大小写

方法

单独指定所需字段(比如,在此处 我所需要区分大小写的字段为表 ‘t_blog' 中的 ‘title' 字段)为 ‘utf8' 编码格式,collate 为“utf8_bin”;

深入探究Mysql模糊查询是否区分大小写

?

1

alter table t_blog change `title` `title` varchar(255) character set utf8 collate utf8_bin null default null;

结论

select * from t_blog where title like ‘%html%';

深入探究Mysql模糊查询是否区分大小写

select * from t_blog where title like ‘%html%';

深入探究Mysql模糊查询是否区分大小写

由上述执行结果可以看出,此方法可以使模糊查询语句区分大小写;

不区分大小写

方法

单独指定所需字段(比如,在此处 我所需要不区分大小写的字段为表 ‘t_blog' 中的 ‘title' 字段)为 ‘utf8mb4' 编码格式,collate 为“utf8mb4_bin”:

深入探究Mysql模糊查询是否区分大小写

?

1

alter table t_blog change `title` `title` varchar(255) character set utf8mb4 collate utf8mb4_bin null default null;

结论 select * from t_blog where title like ‘%html%';

深入探究Mysql模糊查询是否区分大小写

select * from t_blog where title like ‘%html%';

深入探究Mysql模糊查询是否区分大小写

由上述执行结果可以看出,此方法可以使模糊查询语句不区分大小写;

解决办法三

区分大小写

方法

如图所示,当前 ‘t_blog' 表格的 ‘title' 字段的 collate 为 ‘utf8mb4_general_ci' ,不区分大小写

深入探究Mysql模糊查询是否区分大小写

修改字段为binary:

深入探究Mysql模糊查询是否区分大小写

?

1

alter table t_blog change `title` `title` varchar(255) binary null default null;

?

1

alter table `t_blog` modify column `title` varchar(255) binary null default null;

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

结论

select * from t_blog where title like ‘%html%';

深入探究Mysql模糊查询是否区分大小写

select * from t_blog where title like ‘%html%';

深入探究Mysql模糊查询是否区分大小写

由上述执行结果可以看出,修改字段为binary,可以使模糊查询语句区分大小写;

解决办法四

区分大小写

方法

如图所示,当前 ‘t_blog' 表格的 ‘title' 字段的 collate 为 ‘utf8mb4_general_ci' ,不区分大小写

深入探究Mysql模糊查询是否区分大小写

查询语句字段前面加binary:

?

1

select * from `t_blog` where binary `title` like '%html%';

结论

select * from t_blog where title like ‘%html%';

深入探究Mysql模糊查询是否区分大小写

select * from t_blog where binary title like ‘%html%';

深入探究Mysql模糊查询是否区分大小写

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

解决办法五

(特别特别不推荐,尽量不要使用)

找到mysql相应版本下的my.ini文件,本小白对应的8.0.17版本;

深入探究Mysql模糊查询是否区分大小写
在文件最后一行加上下面一句话:

?

1

lower_case_table_names=1

注意:0:区分大小写,1:不区分大小写

重启mysql

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

总结

到此这篇关于mysql模糊查询是否区分大小写的文章就介绍到这了,更多相关mysql模糊查询大小写内容请搜索钦钦技术栈以前的文章或继续浏览下面的相关文章希望大家以后多多支持钦钦技术栈!

原文链接:https://blog.csdn.net/weixin_44694201/article/details/117785085

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/7005/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年 7月 31日 3:30:39
下一篇 2022年 7月 31日 3:31:04

软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!