如何在使用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_ci
replace成你认为有用的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