我如何使用LIKE通配符在列中搜索(不区分大小写)?

我四处看了看,没有找到我要找的东西,所以就这样了。

SELECT * FROM trees WHERE trees.`title` LIKE  '%elm%'

这很好,但如果树的名字是Elm或Elm等…

我如何使SQL不区分大小写为这个通配符搜索?

我使用MySQL 5和Apache。

480634 次浏览

我总是用lower来解决这个问题:

SELECT * FROM trees WHERE LOWER( trees.title ) LIKE  '%elm%'

必须为表设置正确的编码和排序规则。

表编码必须反映实际的数据编码。你的数据编码是什么?

要查看表编码,可以运行查询SHOW CREATE TABLE tablename

大小写敏感性在列/表/数据库排序规则设置中定义。指定排序规则下的查询方法如下:

SELECT *
FROM trees
WHERE trees.`title` LIKE '%elm%' COLLATE utf8_general_ci

例如。

(将utf8_general_ci替换为任何你认为有用的排序规则)。_ci代表不分大小写

SELECT  *
FROM    trees
WHERE   trees.`title` COLLATE UTF8_GENERAL_CI LIKE '%elm%'

实际上,如果你将COLLATE UTF8_GENERAL_CI添加到列的定义中,你可以忽略所有这些技巧:它将自动工作。

ALTER TABLE trees
MODIFY COLUMN title VARCHAR(…) CHARACTER
SET UTF8 COLLATE UTF8_GENERAL_CI.

这还将重新构建此列上的任何索引,以便它们可以用于不以'%'为前导的查询。

当我想开发不敏感的大小写搜索时,我总是在进行比较之前将每个字符串转换为小写

我认为这个查询将进行不区分大小写的搜索:

SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';

在mysql 5.5中,操作符是不敏感的…如果你的值是elm或elm或elm或其他,你使用'%elm%',它会列出所有匹配的值。

我不能说早期版本的mysql。

如果你在Oracle中,work是区分大小写的,所以如果你输入'%elm%',它只会显示这个,忽略大写。

很奇怪,但事实就是这样的:)

这是一个简单的LIKE查询的例子:

SELECT * FROM <table> WHERE <key> LIKE '%<searchpattern>%'

现在,使用LOWER() func区分大小写:

SELECT * FROM <table> WHERE LOWER(<key>) LIKE LOWER('%<searchpattern>%')
SELECT name
FROM gallery
WHERE CONVERT(name USING utf8) LIKE _utf8 '%$q%'
GROUP BY name COLLATE utf8_general_ci LIMIT 5

我正在做类似的事情。

获取小写的值,MySQL完成其余的工作

    $string = $_GET['string'];
mysqli_query($con,"SELECT *
FROM table_name
WHERE LOWER(column_name)
LIKE LOWER('%$string%')");

和MySQL PDO替代方案:

        $string = $_GET['string'];
$q = "SELECT *
FROM table_name
WHERE LOWER(column_name)
LIKE LOWER(?);";
$query = $dbConnection->prepare($q);
$query->bindValue(1, "%$string%", PDO::PARAM_STR);
$query->execute();

你不需要ALTER任何表。在你想使用通配符的实际SELECT查询之前,只需使用以下查询:

    set names `utf8`;
SET COLLATION_CONNECTION=utf8_general_ci;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;

简单地使用:

"SELECT * FROM `trees` WHERE LOWER(trees.`title`) LIKE  '%elm%'";

或使用

"SELECT * FROM `trees` WHERE LCASE(trees.`title`) LIKE  '%elm%'";

两个函数工作相同

使用ILIKE

SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';

这对我很管用!!

非二进制字符串比较(包括LIKE)在MySql中默认为不分大小写: https://dev.mysql.com/doc/refman/en/case-sensitivity.html < / p >

我总是这样解决:

SELECT * FROM trees WHERE LOWER( trees.title ) LIKE  LOWER('%elm%');

例如,如果你想搜索像Raja不是Raja, Royal不是Royal等名称,在WHERE子句的列名前添加BINARY

SELECT name FROM person_tbl
WHERE BINARY name LIKE "R%";