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

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

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

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

我使用MySQL 5和Apache。


当前回答

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. 

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

其他回答

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

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

我不能说早期版本的mysql。

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

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

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

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

简单地使用:

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

或使用

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

两个函数的工作原理是一样的

我总是这样解决:

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