MySQL 如何强制 MySQL LIKE 区分大小写?

MySQL 如何强制 MySQL LIKE 区分大小写?

MySQL 中使用 LIKE 进行模糊查询时,默认是不区分大小写的。比如,使用以下 SQL 语句进行查询:

SELECT * FROM users WHERE name LIKE 'john%';

那么,无论 “John” 还是 “JOHN” 还是 “john”,都会被匹配到。但是,如果我们想要强制进行大小写区分呢?

阅读更多:MySQL 教程

方法一:使用 BINARY 操作符

在执行 LIKE 时,可以使用 BINARY 操作符,将字符串的比较转化为二进制比较,从而实现大小写的区分。

例如,查询 name 字段以 “john” 开头的记录,但是仅匹配 “john” 这个单词而非 “johnny”:

SELECT * FROM users WHERE BINARY name LIKE 'john%';

运行结果:

+----+------------+--------+
| id | name       | gender |
+----+------------+--------+
|  1 | John Smith | male   |
+----+------------+--------+

其中 BINARY 操作符会将 name 字段的值转化为二进制进行比较,只有与模式完全匹配的记录才会被返回。

方法二:修改数据库字符集

另一种方法是在数据库创建时,将字符集设定为大小写敏感的,比如 utf8_bin。这种方式可以在全局范围内强制 MySQL 区分大小写。需要注意的是,如果修改字符集时数据库中已经有数据,那么修改后已有的数据将无法直接使用。可以考虑备份原有数据,然后在新的数据库上进行修改。

以下是修改字符集的 SQL 语句:

CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

在该语句中,字符集为 utf8mb4,COLLATE 参数指定了使用的排序规则(bin 表示大小写敏感)。

方法三:使用 REGEXP

在 MySQL 中,也可以使用 REGEXP 正则表达式进行模糊查询。REGEXP 是大小写敏感的,因此可以实现大小写区分。例如,查询以 “john” 开头的记录,同时排除以 “johnny” 开头的记录:

SELECT * FROM users WHERE name REGEXP '^john[A-Za-z]*$';

说明:^ 表示字符串的开头,[A-Za-z] 表示大小写字母,* 表示任意数量的字母。因此,该语句可以匹配 “John”、”johnDoe”、”johnny” 不匹配。

方法四:使用 COLLATE 关键字

除了上述方法外,MySQL 中还可以使用 COLLATE 关键字,手动指定排序规则。比如,查询以 “john” 开头的记录,同时忽略 “johnny” 这个单词:

SELECT * FROM users WHERE name COLLATE utf8mb4_bin LIKE 'john%';

说明:utf8mb4_bin 是大小写敏感的排序规则。

结论

以上介绍了在 MySQL 中强制 LIKE 区分大小写的方法,包括使用 BINARY 操作符、修改数据库字符集、使用 REGEXP 和使用 COLLATE 关键字。具体使用哪种方式,取决于具体情况,可以根据实际需求选择合适的方法。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程