探究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 COUNT函数的使用与优化
May 10 MySQL
详解MySQL连接挂死的原因
May 18 MySQL
MySQL8.0的WITH查询详情
Aug 30 MySQL
MySQL七种JOIN类型小结
Oct 24 MySQL
记一次Mysql不走日期字段索引的原因小结
Oct 24 MySQL
MySQL常见优化方案汇总
Jan 18 MySQL
Mysql分库分表之后主键处理的几种方法
Feb 15 MySQL
如何创建一个创建MySQL数据库中的datetime类型
Mar 21 MySQL
Mysql查询时间区间日期列表,不会由于数据表数据影响
Apr 19 MySQL
mysql字段为NULL索引是否会失效实例详解
May 30 MySQL
MySQL 语句执行顺序举例解析
Jun 05 MySQL
Mysql中的触发器定义及语法介绍
Jun 25 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
必须收藏的23个php实用代码片段
2016/02/02 PHP
PHP类和对象相关系统函数与运算符小结
2016/09/28 PHP
php微信公众号开发之关键词回复
2018/10/20 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
用js统计用户下载网页所需时间的脚本
2008/10/15 Javascript
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
2017/04/18 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
判断js数据类型的函数实例详解
2019/05/23 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
python生成指定尺寸缩略图的示例
2014/05/07 Python
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
python实现rsa加密实例详解
2017/07/19 Python
python监控进程脚本
2018/04/12 Python
django 发送手机验证码的示例代码
2018/04/25 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
Python实现ATM系统
2020/02/17 Python
python扫描线填充算法详解
2020/02/19 Python
django跳转页面传参的实现
2020/09/17 Python
特步官方商城:Xtep
2017/03/21 全球购物
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
导购员的岗位职责
2014/02/08 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书