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

我环顾了一下,没有find我以后的事情。

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

这工作正常,但不是如果树被命名为榆树或ELM等…

如何让这个通配符search对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. 

这也将重build此列上的任何索引,以便它们可以用于没有前导'%'的查询

我一直使用lower来解决这个问题:

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

区分大小写在列/表/数据库归类设置中定义。 您可以按照以下方式在特定归类下执行查询:

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

例如。

(把utf8_general_cireplace成你认为有用的sorting方式)。 _ci表示不区分大小写

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

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

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

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

我正在做这样的事情。

其余部分以小写forms获取值

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

而对于MySQL PDOselect:

  $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(); 

我认为这个查询会做一个不区分大小写的search:

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

您必须为表格设置适当的编码和sorting规则。

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

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

当我想开发不敏感的病例search时,我总是将每个string转换为小写,然后再进行比较

以及在MySQL 5.5中,像运算符是不敏感的…所以如果你的价值是榆树或榆树或榆树或eLM或任何其他,你使用像'%elm%',它会列出所有的匹配值。

我不能说早期版本的MySQL。

如果你进入Oracle,就像区分大小写一样工作,那么如果你键入'%elm%',它只会为此而忽略大括号。

奇怪,但这是怎么回事:)

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

  set names `utf8`; SET COLLATION_CONNECTION=utf8_general_ci; SET CHARACTER_SET_CLIENT=utf8; SET CHARACTER_SET_RESULTS=utf8; 
 SELECT name FROM gallery WHERE CONVERT(name USING utf8) LIKE _utf8 '%$q%' GROUP BY name COLLATE utf8_general_ci LIMIT 5