探究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 相关文章推荐
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
Apr 05 MySQL
MySQL主从搭建(多主一从)的实现思路与步骤
May 13 MySQL
详解MySQL集群搭建
May 26 MySQL
MySQL不使用order by实现排名的三种思路总结
Jun 02 MySQL
MySQL系列之四 SQL语法
Jul 02 MySQL
MySQL系列之十一 日志记录
Jul 02 MySQL
Mysql外键约束的创建与删除的使用
Mar 03 MySQL
MySQL查询日期时间
May 15 MySQL
MySQL范围查询优化的场景实例详解
Jun 10 MySQL
MySQL事务的隔离级别详情
Jul 15 MySQL
SQLServer常见数学函数梳理总结
Aug 05 MySQL
mysql序号rownum行号实现方式
Dec 24 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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
mysql中存储过程、函数的一些问题
2007/02/14 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
施工资料员的岗位职责
2013/12/22 职场文书
军训自我鉴定
2014/01/22 职场文书
人力资源主管岗位职责
2014/01/29 职场文书
阳光体育活动总结
2014/04/30 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
浅谈react useEffect闭包的坑
2021/06/08 Javascript