探究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 相关文章推荐
如何用Navicat操作MySQL
May 12 MySQL
MySQL优化之如何写出高质量sql语句
May 17 MySQL
Mysql Online DDL的使用详解
May 20 MySQL
MySQL 8.0 之不可见列的基本操作
May 20 MySQL
新手必备之MySQL msi版本下载安装图文详细教程
May 21 MySQL
MySQL删除和插入数据很慢的问题解决
Jun 03 MySQL
解决mysql的int型主键自增问题
Jul 15 MySQL
详细聊聊关于Mysql联合查询的那些事儿
Oct 24 MySQL
MySQL之select、distinct、limit的使用
Nov 11 MySQL
浅谈MySql update会锁定哪些范围的数据
Jun 25 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
Sep 23 MySQL
postgresql如何找到表中重复数据的行并删除
May 08 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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
PHP flock 文件锁详细介绍
2012/12/29 PHP
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
jquery层级选择器的实现(匹配后代元素div)
2016/09/05 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
2016/12/21 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
vue.extend实现alert模态框弹窗组件
2018/04/28 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
微信小程序缓存过期时间的使用详情
2019/05/12 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
Python的subprocess模块总结
2014/11/07 Python
python删除列表中重复记录的方法
2015/04/28 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
2016/03/21 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
HTML5 Plus 实现手机APP拍照或相册选择图片上传功能
2016/07/13 HTML / CSS
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
UNIX文件系统分类
2014/11/11 面试题
信息服务专业毕业生求职信
2014/03/02 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
委托书样本
2014/04/02 职场文书
《毛主席在花山》教学反思
2014/04/20 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
群众路线查摆问题整改措施
2014/10/10 职场文书