我四处看了看,没有找到我要找的东西,所以就这样了。
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
这很好,但如果树的名字是Elm或Elm等…
我如何使SQL不区分大小写为这个通配符搜索?
我使用MySQL 5和Apache。
我总是用lower来解决这个问题:
SELECT * FROM trees WHERE LOWER( trees.title ) LIKE '%elm%'
必须为表设置正确的编码和排序规则。
表编码必须反映实际的数据编码。你的数据编码是什么?
要查看表编码,可以运行查询SHOW CREATE TABLE tablename
SHOW CREATE TABLE tablename
大小写敏感性在列/表/数据库排序规则设置中定义。指定排序规则下的查询方法如下:
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%' COLLATE utf8_general_ci
例如。
(将utf8_general_ci替换为任何你认为有用的排序规则)。_ci代表不分大小写。
utf8_general_ci
_ci
SELECT * FROM trees WHERE trees.`title` COLLATE UTF8_GENERAL_CI LIKE '%elm%'
实际上,如果你将COLLATE UTF8_GENERAL_CI添加到列的定义中,你可以忽略所有这些技巧:它将自动工作。
COLLATE UTF8_GENERAL_CI
ALTER TABLE trees MODIFY COLUMN title VARCHAR(…) CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI.
这还将重新构建此列上的任何索引,以便它们可以用于不以'%'为前导的查询。
当我想开发不敏感的大小写搜索时,我总是在进行比较之前将每个字符串转换为小写
我认为这个查询将进行不区分大小写的搜索:
SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';
在mysql 5.5中,操作符是不敏感的…如果你的值是elm或elm或elm或其他,你使用'%elm%',它会列出所有匹配的值。
我不能说早期版本的mysql。
如果你在Oracle中,work是区分大小写的,所以如果你输入'%elm%',它只会显示这个,忽略大写。
很奇怪,但事实就是这样的:)
这是一个简单的LIKE查询的例子:
SELECT * FROM <table> WHERE <key> LIKE '%<searchpattern>%'
现在,使用LOWER() func区分大小写:
SELECT * FROM <table> WHERE LOWER(<key>) LIKE LOWER('%<searchpattern>%')
SELECT name FROM gallery WHERE CONVERT(name USING utf8) LIKE _utf8 '%$q%' GROUP BY name COLLATE utf8_general_ci LIMIT 5
我正在做类似的事情。
获取小写的值,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();
你不需要ALTER任何表。在你想使用通配符的实际SELECT查询之前,只需使用以下查询:
ALTER
SELECT
set names `utf8`; SET COLLATION_CONNECTION=utf8_general_ci; SET CHARACTER_SET_CLIENT=utf8; SET CHARACTER_SET_RESULTS=utf8;
简单地使用:
"SELECT * FROM `trees` WHERE LOWER(trees.`title`) LIKE '%elm%'";
或使用
"SELECT * FROM `trees` WHERE LCASE(trees.`title`) LIKE '%elm%'";
两个函数工作相同
使用ILIKE
ILIKE
这对我很管用!!
LIKE
我总是这样解决:
SELECT * FROM trees WHERE LOWER( trees.title ) LIKE LOWER('%elm%');
例如,如果你想搜索像Raja不是Raja, Royal不是Royal等名称,在WHERE子句的列名前添加BINARY。
BINARY
SELECT name FROM person_tbl WHERE BINARY name LIKE "R%";