我环顾四周,没有找到我想要的东西,所以就到这里了。
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
这工作正常,但如果树被命名为榆树或榆树等...
对于这个通配符搜索,如何使 SQL 不区分大小写?
我正在使用 MySQL 5 和 Apache。
我环顾四周,没有找到我想要的东西,所以就到这里了。
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
这工作正常,但如果树被命名为榆树或榆树等...
对于这个通配符搜索,如何使 SQL 不区分大小写?
我正在使用 MySQL 5 和 Apache。
我总是用lower解决这个问题:
SELECT * FROM trees WHERE LOWER( trees.title ) LIKE '%elm%'
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.
这还将重建此列上的任何索引,以便它们可以用于不带前导 '%' 的查询
区分大小写在列/表/数据库排序规则设置中定义。您可以通过以下方式在特定排序规则下进行查询:
SELECT *
FROM trees
WHERE trees.`title` LIKE '%elm%' COLLATE utf8_general_ci
例如。
(替换utf8_general_ci
为您认为有用的任何排序规则)。_ci
代表不区分大小写。
这是一个简单的 LIKE 查询示例:
SELECT * FROM <table> WHERE <key> LIKE '%<searchpattern>%'
现在,使用 LOWER() 函数不区分大小写:
SELECT * FROM <table> WHERE LOWER(<key>) LIKE LOWER('%<searchpattern>%')
只需使用:
"SELECT * FROM `trees` WHERE LOWER(trees.`title`) LIKE '%elm%'";
或使用
"SELECT * FROM `trees` WHERE LCASE(trees.`title`) LIKE '%elm%'";
两个功能都一样
我正在做类似的事情。
获取小写的值,其余的由 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();
我认为此查询将进行不区分大小写的搜索:
SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';
利用ILIKE
SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';
它对我有用!
默认情况下,非二进制字符串比较(包括LIKE
)在 MySql 中不区分大小写:
https ://dev.mysql.com/doc/refman/en/case-sensitive.html
你不需要ALTER
任何桌子。SELECT
只需在要使用通配符的实际查询之前使用以下查询:
set names `utf8`;
SET COLLATION_CONNECTION=utf8_general_ci;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;
在 mysql 5.5 中,like 运算符是不敏感的......所以如果你的 vale 是 elm 或 ELM 或 Elm 或 eLM 或任何其他,并且你使用 like '%elm%' ,它将列出所有匹配的值。
我不能说早期版本的mysql。
如果你进入 Oracle ,就像区分大小写一样工作,所以如果你输入像 '%elm%' ,它只会为此而忽略大写..
奇怪,但这就是它的样子:)
SELECT name
FROM gallery
WHERE CONVERT(name USING utf8) LIKE _utf8 '%$q%'
GROUP BY name COLLATE utf8_general_ci LIMIT 5
您必须为表设置正确的编码和排序规则。
表编码必须反映实际的数据编码。你的数据编码是什么?
要查看表编码,您可以运行查询SHOW CREATE TABLE tablename
当我想开发不区分大小写的搜索时,我总是在进行比较之前将每个字符串转换为小写
我一直是这样解决的:
SELECT * FROM trees WHERE LOWER( trees.title ) LIKE LOWER('%elm%');
您可以使用以下方法
private function generateStringCondition($value = '',$field = '', $operator = '', $regex = '', $wildcardStart = '', $wildcardEnd = ''){
if($value != ''){
$where = " $field $regex '$wildcardStart".strtolower($value)."$wildcardEnd' ";
$searchArray = explode(' ', $value);
if(sizeof($searchArray) > 1){
foreach ($searchArray as $key=>$value){
$where .="$operator $field $regex '$wildcardStart".strtolower($value)."$wildcardEnd'";
}
}
}else{
$where = '';
}
return $where;
}
使用这种方法,如下所示
$where = $this->generateStringCondition($yourSearchString, 'LOWER(columnName)','or', 'like', '%', '%');
$sql = "select * from table $where";