我环顾四周,却找不到我想要的东西,所以去了。
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
这很好用,但是如果树被命名为Elm或ELM等则不行。
如何使此通配符搜索的SQL大小写不敏感?
我正在使用MySQL 5和Apache。
like
默认情况下不区分大小写。
我环顾四周,却找不到我想要的东西,所以去了。
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
这很好用,但是如果树被命名为Elm或ELM等则不行。
如何使此通配符搜索的SQL大小写不敏感?
我正在使用MySQL 5和Apache。
like
默认情况下不区分大小写。
Answers:
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.
这还将重建该列上的所有索引,以便可以将其用于查询而无需以“%”开头
COLLATE UTF8_GENERAL_CI
到列的定义中,则可以忽略所有这些技巧:它将自动运行。ALTER TABLE trees MODIFY COLUMN title VARCHAR(…) CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI
。这还将重建该列上的所有索引,以便它们可用于查询而无需前导'%'。
我总是用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
为您认为有用的任何排序规则)。该_ci
代表不区分大小写。
utf8_general_ci
不过效果很好。
SELECT * FROM products WHERE name COLLATE utf8_general_ci LIKE 'AB47TU';
这是一个简单的LIKE查询的示例:
SELECT * FROM <table> WHERE <key> LIKE '%<searchpattern>%'
现在,使用LOWER()函数不区分大小写:
SELECT * FROM <table> WHERE LOWER(<key>) LIKE LOWER('%<searchpattern>%')
COLLATE
格式的问题
我正在做类似的事情。
以小写形式获取值,其余部分由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%';
它为我工作!
很好地在mysql 5.5中,像运算符是不敏感的...因此,如果您的vale是elm或ELM或Elm或eLM或其他任何东西,而您使用的像'%elm%',它将列出所有匹配的值。
我不能说早期版本的mysql。
如果您使用的是Oracle,就像对大小写敏感的工作一样,那么如果您输入'%elm%',它将只适用于此,而忽略大写字母。
奇怪,但这就是事实:)
*_ci
,它才可以工作,表示“不区分大小写”。由于这恰好是所有支持的字符集的默认设置(show character set;
请检查此问题)-答案部分正确:-)仅原因不正确。不区分大小写的不是运算符,而是默认排序规则。
您可以使用以下方法
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";
非二进制字符串比较(包括LIKE
)在MySql中默认不区分大小写:https :
//dev.mysql.com/doc/refman/zh-CN/case-sensitiveivity.html
BINARY
如这里:stackoverflow.com/questions/7857669/...