MYSQL插入、查询区分大小写

项目场景:

最近因为需求需要添加查询一批数据,但是在查询数据时需要区分大小写。但是经过测试在MYSQL默认情况下的查询和数据插入是不区分大小写的。如何能让MYSQL在查询和插入时区分大小写呢?这里提供了几种方法。


问题复现

我创建了一个MYSQL表如下:

USE `backend_server`;
DROP TABLE IF EXISTS `vehicle_model`;
CREATE TABLE `vehicle_model`(
   `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
   `oem` VARCHAR(20) NOT NULL,
   `brand` VARCHAR(20) NOT NULL COMMENT '品牌',
   `model_code` VARCHAR(6) NOT NULL UNIQUE COMMENT '六位码',
   `created_time` datetime NULL DEFAULT NULL,
   `updated_time` datetime NULL DEFAULT NULL,
   PRIMARY KEY(`id`) USING BTREE,
   INDEX sop_vehicle_model_brand_oem(`oem`,`brand`) USING BTREE
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

其中创建了一个唯一索引,用于存入唯一数据,现在往表里插入一条数据:

INSERT INTO `vehicle_model`(`oem`,`brand`,`model_code`) VALUES("E123","AUDI","XAO001");

此时如果根据唯一索引字段model_code查询数据会发现MYSQL查询条件不区分大小写,也就是说这两条查询语句都会生效。

SELECT * FROM `vehicle_model` WHERE `model_code` = "XAO001";
SELECT * FROM `vehicle_model` WHERE `model_code` = "xao001";

并且如果向数据库插入一条model_code为xao001的数据,MYSQL会报唯一索引数据重复的错。也就说MYSQL默认在判断唯一索引值的时候是不会区分大小写的。

INSERT INTO `vehicle_model`(`oem`,`brand`,`model_code`) VALUES("E123","AUDI","xao001");

在这里插入图片描述


解决方案:

一、使用BINARY标识敏感属性,在查询的时候在相关查询字段前增加BINARY:

SELECT * FROM `vehicle_model` WHERE BINARY `model_code` = "xao001";

此时MYSQL查询就会区分大小写。以上SQL查询将不会返回数据。
在这里插入图片描述
二、虽然在查询字段之前加BINARY可以实现查询条件区分大小写,但是唯一索引插入数据时还是没有区分大小写,解决方法是可以修改以上的建表语句:

`model_code` VARCHAR(6) NOT NULL UNIQUE COMMENT '六位码',
改为
`model_code` VARCHAR(6) BINARY NOT NULL UNIQUE COMMENT '车型六位码',

也就是在字段后面加上BINARY即可,此时model_code的查询和插入会自动区分大小写,唯一索引也实现了区分大小写的插入和查询。

猜你喜欢

转载自blog.csdn.net/qq_43600166/article/details/124899673