我环顾四周,没有找到我想要的东西,所以就在这里。
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
这工作正常,但如果树被命名为 Elm 或 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.
这还将重建该列上的所有索引,以便它们可以用于查询而无需前导“%”
这是一个简单的 LIKE 查询的示例:
SELECT * FROM <table> WHERE <key> LIKE '%<searchpattern>%'
现在,使用 LOWER() 函数不区分大小写:
SELECT * FROM <table> WHERE LOWER(<key>) LIKE LOWER('%<searchpattern>%')
区分大小写是在列/表/数据库排序规则设置中定义的。您可以通过以下方式在特定排序规则下进行查询:
SELECT *
FROM trees
WHERE trees.`title` LIKE '%elm%' COLLATE utf8_general_ci
例如。
(将
utf8_general_ci
替换为您认为有用的任何排序规则)。 _ci
代表 不区分大小写。
简单使用:
"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();
ILIKE
SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';
它对我有用!!
SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';
ALTER
任何桌子。只需在要使用通配符的实际
SELECT
查询之前使用以下查询:
set names `utf8`;
SET COLLATION_CONNECTION=utf8_general_ci;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;
我不能说早期版本的 mysql。
如果你进入 Oracle ,就像区分大小写一样,所以如果你输入像 '%elm%' 这样的内容,它只会执行此操作并忽略大写..
奇怪,但事实就是这样:)
SELECT * FROM trees WHERE LOWER( trees.title ) LIKE LOWER('%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 trees.`title` ILIKE '%elm%';