mysql 默认使用 like 进行模糊搜索的时候是不区分大小写的。
但是如果在创建表结构的时候选择了部分校对规则,比如下图的utf8_bin此时就在模糊搜索的时候就严格区分大小写了。(表创建使用HeidiSQL)
CREATE TABLE `test_table` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name1` VARCHAR(50) NOT NULL COLLATE 'utf8_bin', #列级别
`name2` VARCHAR(50) NOT NULL COLLATE 'utf8_general_ci',
PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8_general_ci' #表级别
ENGINE=InnoDB
;
上图的测试表中name1字段的校对规则选的是utf8_bin, name2的校对规则是和表级别的校对规则一样的utf8_general_ci
插入几条简单数据
INSERT INTO `test_table` (`id`, `name1`, `name2`) VALUES
(1, 'Ok', 'Abc'),
(2, 'ok', 'aBc'),
(3, 'OK', 'abc'),
(4, 'ok', 'ABC');
模糊查询name1
SELECT id,NAME1 FROM test_table WHERE NAME1 LIKE '%O%';
+----+-------+
| id | NAME1 |
+----+-------+
| 1 | Ok |
| 3 | OK |
+----+-------+
模糊查询name2
SELECT id,NAME2 FROM test_table WHERE NAME2 LIKE '%A%';
+----+-------+
| id | NAME2 |
+----+-------+
| 1 | Abc |
| 2 | aBc |
| 3 | abc |
| 4 | ABC |
+----+-------+
此时如果需要区分大小写可以在LIKE后面加上 BINARY
SELECT id,NAME2 FROM test_table WHERE NAME2 LIKE BINARY '%A%'
+----+-------+
| id | NAME2 |
+----+-------+
| 1 | Abc |
| 4 | ABC |
+----+-------+