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

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

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

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

我使用MySQL 5和Apache。


当前回答

您不需要更改任何表。只需使用以下查询,在实际的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  LOWER('%elm%');
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. 

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

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

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

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

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

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

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