前言
相信很多工作中或者正在学习中的小伙伴都会接触到MySQL数据库,而MySQL数据库默认是不区分表名和字段名的大小写的。当然,你也可以自己设置区分或不区分大小写,这里不会过多说明,感兴趣的同学可以去查阅资料了解。今天要说的是当我们用MySQL来筛选数据的时候,对于字符串类型的比较,它也会忽略大小写,这样就会导致我们查询出来的数据不准确。
一、实验
1.创建一张表和插入数据
DROP TABLE IF EXISTS `department`;
CREATE TABLE `department` (
`id` int(11) NOT NULL COMMENT '主键',
`department_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '部门id',
`department_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '部门名称',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
INSERT INTO `department` VALUES (1, '45a68', '架构组');
INSERT INTO `department` VALUES (2, '45A68', '测试组');
2.使用条件筛选数据
SELECT * FROM department WHERE department_id='45A68';
SELECT * FROM department WHERE department_id='45a68';
查询一的结果1,发现这两条数据只有一条满足要求。 查询二的结果2,发现这两条数据也只有一条满足要求。
3.结论
通过上述现象发现,MySQL在筛选的时候,字符串无法精准匹配大小写,那么如何解决上述问题呢?
二、binary二进制比较
1.binary的介绍
binary是MySQL的一个函数,用于将值转换为二进制字符串。
2.binary如何使用
将binary放在需要转为二进制列的前面 示例:
SELECT * FROM department WHERE BINARY department_id='45A68';
查询条件不变,在筛选的条件列前面加个binary,结果只有一条,这样结果才是对的。
3.小技巧
对于上述加了binary后的查询语句,我们试分析一下,当数据足够大时,我们要对每条数据都进行binary处理后比较,这样做比较耗时,解决办法,可以把函数放到“=”的右边(对于其他MySQL的类似函数同样适用)。
总结
以上就是解决MySQL在筛选的时候,字符串比较忽略大小写的问题,如果有错误请及时提出。
博主不易,如若对你有帮助记得点赞哦!
|