59

我正在尝试执行 sql 查询:

select * from table where column like '%value%';

但数据保存为“价值”(V 是大写)。

当我执行此查询时,我没有得到任何行。我如何进行调用,以便无论字符的大小写如何,它都会寻找“价值”?

4

9 回答 9

117

在(列和搜索词)中都使用 LOWER 函数。这样做,您可以确保即使查询中的值类似于 %VaLuE%,也没关系

select qt.*
from query_table qt
where LOWER(column_name) LIKE LOWER('%vAlUe%');
于 2013-09-17T15:15:00.357 回答
16

如果您希望此列不区分大小写:

ALTER TABLE `schema`.`table` 
CHANGE COLUMN `column` `column` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

因此,您不必更改查询。

并且 MySQL 引擎将比使用 lower() 函数或任何其他技巧更快地处理您的查询。

而且我不确定使用较低的功能是否会成为索引搜索性能的良好解决方案。

于 2013-09-17T15:15:08.263 回答
15

在您的表上使用不区分大小写的排序规则,或强制值小写,例如

WHERE lower(column) LIKE lower('%value%');
于 2013-09-17T15:09:51.637 回答
7

使用lower()功能:

select t.*
from table t
where lower(column) like '%value%';
于 2013-09-17T15:08:31.753 回答
6

尝试使用不区分大小写的排序规则

select * from table
where column like '%value%' collate utf8_general_ci
于 2013-09-17T15:08:29.303 回答
5

如果您使用的是 PostgreSQL,一个更简单的解决方案是使用不敏感的 (ILIKE)

SELECT * FROM table WHERE column ILIKE '%value%'
于 2017-05-22T20:26:28.163 回答
3

当您使用 like 搜索某些字段时,您应该使用lowerupper函数来忽略大小写。

select * from student where upper(sname) like 'S%';

或者

select * from student where lower(sname) like 'S%';
于 2016-12-26T06:01:11.170 回答
3

我知道这是一个非常古老的问题,但我将其发布为后代:默认情况下,
非二进制字符串比较(包括LIKE)在 MySql 中不区分大小写: https ://dev.mysql.com/doc/refman/en /case-sensitive.html

于 2020-04-28T08:28:21.903 回答
-1

这最终会做同样的事情。无论外壳性质如何,ILIKE 都能正常工作

SELECT * FROM table WHERE column_name ILIKE "%value%"

于 2020-11-11T11:41:53.457 回答