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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值