mysql - 如何使用LIKE通配符在列中搜索(不区分大小写)?
我环顾了一些,但没有找到我之后的情况。
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
这工作正常,但如果树名为Elm或ELM等,则不行......
如何使这种通配符搜索的SQL不区分大小写?
我正在使用MySQL 5和Apache。
13个解决方案
216 votes
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.
这也将重建此列上的任何索引,以便它们可用于查询而不会导致'%'
Quassnoi answered 2019-03-10T12:26:41Z
190 votes
我总是使用较低的解决方法:
SELECT * FROM trees WHERE LOWER( trees.title ) LIKE '%elm%'
cwallenpoole answered 2019-03-10T12:27:05Z
43 votes
区分大小写在列/表/数据库排序规则设置中定义。 您可以通过以下方式在特定排序规则下执行查询:
SELECT *
FROM trees
WHERE trees.`title` LIKE '%elm%' COLLATE utf8_general_ci
例如。
(将utf8_general_ci替换为您认为有用的任何排序规则)。 _ci代表不区分大小写。
aioobe answered 2019-03-10T12:27:41Z
35 votes
这是一个简单LIKE查询的示例:
SELECT * FROM
现在,使用LOWER()函数不区分大小写:
SELECT * FROM
Federico Piragua answered 2019-03-10T12:28:14Z
14 votes
我正在做那样的事情。
以小写形式获取值,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();
Doğa Özkaracaabatlıoğlu answered 2019-03-10T12:28:56Z
10 votes
只需使用:
"SELECT * FROM `trees` WHERE LOWER(trees.`title`) LIKE '%elm%'";
或者使用
"SELECT * FROM `trees` WHERE LCASE(trees.`title`) LIKE '%elm%'";
两个功能都相同
Vi8L answered 2019-03-10T12:29:39Z
8 votes
我认为这个查询会做一个不区分大小写的搜索:
SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';
cgupta answered 2019-03-10T12:30:05Z
1 votes
您不需要ALTER任何表。 只需在要使用通配符的实际SELECT查询之前使用以下查询:
set names `utf8`;
SET COLLATION_CONNECTION=utf8_general_ci;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;
Lopofsky answered 2019-03-10T12:30:31Z
0 votes
您必须为表设置正确的编码和排序规则。
表编码必须反映实际的数据编码。 你的数据编码是什么?
要查看表编码,可以运行查询SHOW CREATE TABLE tablename
Your Common Sense answered 2019-03-10T12:31:11Z
0 votes
当我想开发不敏感的案例搜索时,我总是在比较之前将每个字符串转换为小写
Rbacarin answered 2019-03-10T12:31:38Z
0 votes
好吧在mysql 5.5中,像操作符不敏感...所以如果你的谷是榆树或ELM或榆树或eLM或任何其他,并且你使用'%elm%',它将列出所有匹配的值。
我不能说早期版本的mysql。
如果你进入Oracle,就像工作区分大小写一样,所以如果你输入'%elm%',它只会为此而忽略大写..
奇怪,但这是怎么回事:)
user21546 answered 2019-03-10T12:32:25Z
0 votes
使用ILIKE
SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';
它对我有用!!
ABS zarzis answered 2019-03-10T12:33:00Z
-1 votes
SELECT name
FROM gallery
WHERE CONVERT(name USING utf8) LIKE _utf8 '%$q%'
GROUP BY name COLLATE utf8_general_ci LIMIT 5
user4189641 answered 2019-03-10T12:33:19Z