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


Posted in MySQL onJune 11, 2021

前言

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

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

CHSRSET COLLATE
latin1 latin1_swedish_ci
gbk gbk_chinese_ci
utf8mb4 utf8mb4_general_ci
utf8 utf8_bin

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

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

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

解决方法一

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

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

区分大小写

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

建表语句也采用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;

探究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编码格式

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模糊查询是否区分大小写

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模糊查询是否区分大小写

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模糊查询是否区分大小写

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%';

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

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

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

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

解决办法四

区分大小写

方法

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

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

查询语句字段前面加BINARY:

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模糊查询是否区分大小写
在文件最后一行加上下面一句话:

lower_case_table_names=1

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

重启mysql

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

总结

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

MySQL 相关文章推荐
MySQL 不等于的三种使用及区别
Jun 03 MySQL
Mysql 如何查询时间段交集
Jun 08 MySQL
mysql脏页是什么
Jul 26 MySQL
SQL实现LeetCode(175.联合两表)
Aug 04 MySQL
MySQL数据库10秒内插入百万条数据的实现
Nov 01 MySQL
SQL注入篇学习之盲注/宽字节注入
Mar 03 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 MySQL
聊聊mysql都有哪几种分区方式
Apr 13 MySQL
mysql 子查询的使用
Apr 28 MySQL
Mysql中@和@@符号的详细使用指南
Jun 05 MySQL
MySQL范围查询优化的场景实例详解
Jun 10 MySQL
MySQL池化框架学习接池自定义
Jul 23 MySQL
安装配置mysql及Navicat prenium的详细流程
mysql 如何获取两个集合的交集/差集/并集
Jun 08 #MySQL
Mysql 如何查询时间段交集
Jun 08 #MySQL
mysql中between的边界,范围说明
Jun 08 #MySQL
MySQL 百万级数据的4种查询优化方式
MySQL 全文检索的使用示例
Jun 07 #MySQL
MySQL 常见的数据表设计误区汇总
Jun 07 #MySQL
You might like
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
PHP创建XML接口示例
2019/07/04 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
Expandable "Detail" Table Rows
2007/08/29 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
2014/01/07 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
2014/08/05 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
2016/06/03 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
python3爬虫GIL修改多线程实例讲解
2020/11/24 Python
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
大学生旷课检讨书
2014/01/22 职场文书
十佳护士获奖感言
2014/02/18 职场文书
啦啦队口号大全
2014/06/16 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
投资入股合作协议书
2014/10/28 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
检讨书格式范文
2015/05/07 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书
python 进阶学习之python装饰器小结
2021/09/04 Python