mysql like 不区分大小写
在MySQL数据库中,使用LIKE
操作符进行模糊查询时,默认是区分大小写的。也就是说,如果你查询'apple'
,那么只会返回包含'apple'
的记录,而不会返回包含'Apple'
的记录。但是有时候,我们希望在进行模糊查询时不区分大小写,这时候就需要使用一些技巧来实现。
解决方法
1. 使用LOWER
函数
一种常见的方法是在进行LIKE
比较之前,将查询条件和数据库字段都转换为小写或大写。这样就能够实现不区分大小写的查询。
示例代码如下:
SELECT *
FROM table_name
WHERE LOWER(column_name) LIKE LOWER('%search_keyword%');
其中,table_name
为表名,column_name
为列名,search_keyword
为要查询的关键词。这样会将column_name
字段和查询关键词都转换为小写进行比较。
2. 使用LIKE BINARY
另一种方法是使用LIKE BINARY
操作符,它将比较时区分大小写,但是可以强制比较为二进制数据,从而实现不区分大小写的查询。
示例代码如下:
SELECT *
FROM table_name
WHERE column_name LIKE BINARY '%search_keyword%';
3. 修改数据库或表的Collation
还有一种方法是修改数据库或表的Collation,使之默认不区分大小写。这样在进行LIKE
比较时就会自动忽略大小写。
假设数据库的Collation为utf8_general_ci
,它默认是不区分大小写的,那么就可以直接进行LIKE
查询而不用担心大小写问题。
示例代码
假设有一个名为student
的表,表结构如下:
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(50)
);
INSERT INTO student VALUES (1, 'Alice');
INSERT INTO student VALUES (2, 'Bob');
INSERT INTO student VALUES (3, 'Cathy');
INSERT INTO student VALUES (4, 'David');
现在我们希望查询名字中包含'a'
的记录,不区分大小写。可以使用以下两种方法:
使用LOWER
函数
SELECT *
FROM student
WHERE LOWER(name) LIKE LOWER('%a%');
查询结果为:
| id | name |
|----|-------|
| 1 | Alice |
| 3 | Cathy |
使用LIKE BINARY
SELECT *
FROM student
WHERE name LIKE BINARY '%a%';
查询结果为:
| id | name |
|----|-------|
| 1 | Alice |
| 3 | Cathy |
总结
通过上述方法,我们可以实现在MySQL中进行LIKE
模糊查询时不区分大小写。可以根据实际情况选择合适的方法来进行处理,以便达到预期的查询效果。