Как я могу искать (без учета регистра) в столбце, используя подстановочный знак?
Я посмотрел вокруг и не нашел то, что я был после так вот.
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
Это прекрасно работает, но не если дерево называется вяз или Карагач и т. д...
Как сделать SQL регистр нечувствительным для этого поиска диких карт?
Я использую MySQL 5 и Apache.
12 ответов:
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расшифровывается как регистр.
Это пример простого запроса типа:
SELECT * FROM <table> WHERE <key> LIKE '%<searchpattern>%'теперь, без учета регистра, используя LOWER () func:
SELECT * FROM <table> WHERE LOWER(<key>) LIKE LOWER('%<searchpattern>%')
Я делаю что-то подобное.
получение значений в нижнем регистре и 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%';
просто использовать :
"SELECT * FROM `trees` WHERE LOWER(trees.`title`) LIKE '%elm%'";Или Использовать
"SELECT * FROM `trees` WHERE LCASE(trees.`title`) LIKE '%elm%'";обе функции работают одинаково
не нужно
ALTERлюбой стол. Просто используйте следующие запросы, до фактическогоSELECTзапрос, который вы хотите использовать подстановочный:set names `utf8`; SET COLLATION_CONNECTION=utf8_general_ci; SET CHARACTER_SET_CLIENT=utf8; SET CHARACTER_SET_RESULTS=utf8;
вы должны настроить правильную кодировку и параметры сортировки для ваших таблиц.
кодировка таблицы должна отражать фактическую кодировку данных. Что такое кодировка данных?
чтобы увидеть кодировку таблицы, вы можете запустить запрос
SHOW CREATE TABLE tablename
когда я хочу разработать нечувствительный регистр поиска, я всегда преобразую каждую строку в нижний регистр, прежде чем делать comparasion
ну в mysql 5.5, как оператор есть insensitive...so если ваша долина-это вяз или вяз, вяз или вяз или любой другой , и вы используете как " %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
Comments