it-roy-ru.com

Как я могу искать (без учета регистра) в столбце, используя подстановочный знак LIKE?

Я посмотрел вокруг и не нашел то, что я был после, так что здесь идет.

SELECT * FROM trees WHERE trees.`title` LIKE  '%Elm%'

Это прекрасно работает, но не в том случае, если дерево называется Elm или Elm и т.д ...

Как сделать SQL нечувствительным к регистру для этого поиска по шаблону?

Я использую MySQL 5 и Apache.

224
David Morrow
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. 

Это также перестроит все индексы в этом столбце, чтобы их можно было использовать для запросов без начального «%».

224
Quassnoi

Я всегда решал это с помощью ниже:

SELECT * FROM trees WHERE LOWER( trees.title ) LIKE  '%Elm%'
198
cwallenpoole

Чувствительность к регистру определяется в настройках сопоставления столбцов/таблиц/базы данных. Вы можете выполнить запрос в соответствии с определенным сопоставлением следующим образом:

SELECT *
FROM trees
WHERE trees.`title` LIKE '%Elm%' COLLATE utf8_general_ci

например.

(Замените utf8_general_ci на то, что вы найдете полезным). _ci обозначает без учета регистра .

44
aioobe

Это пример простого запроса LIKE:

SELECT * FROM <table> WHERE <key> LIKE '%<searchpattern>%'

Теперь без учета регистра с помощью функции LOWER ():

SELECT * FROM <table> WHERE LOWER(<key>) LIKE LOWER('%<searchpattern>%')
35
Federico Piragua

Я делаю что-то подобное.

Получение значений в нижнем регистре, а 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();
14
Doğa Özkaracaabatlıoğlu

Просто используйте:

"SELECT * FROM `trees` WHERE LOWER(trees.`title`) LIKE  '%Elm%'";

Или использовать

"SELECT * FROM `trees` WHERE LCASE(trees.`title`) LIKE  '%Elm%'";

Обе функции работают одинаково

13
Vi8L

Я думаю, что этот запрос будет делать поиск без учета регистра:

SELECT * FROM trees WHERE trees.`title` ILIKE '%Elm%';
7
cgupta
SELECT name 
       FROM gallery 
       WHERE CONVERT(name USING utf8) LIKE _utf8 '%$q%' 
       GROUP BY name COLLATE utf8_general_ci LIMIT 5 
1
user4189641

хорошо в mysql 5.5, оператор like нечувствителен ... так что, если ваш vale - Elm или Elm или Elm или Elm или любой другой, и вы используете как "% Elm%", он перечислит все соответствующие значения.

Я не могу сказать о более ранних версиях MySQL.

Если вы заходите в Oracle, например, работаете с учетом регистра, поэтому, если вы наберете «% Elm%», он пойдет только на это и проигнорирует заглавные буквы.

Странно, но так оно и есть :)

0
user21546

Когда я хочу разработать регистронезависимый поиск, я всегда конвертирую каждую строку в строчные, прежде чем делать сравнение

0
Rbacarin

Вы должны настроить правильное кодирование и сопоставление для ваших таблиц.

Кодировка таблицы должна отражать фактическую кодировку данных. Какая у вас кодировка данных? 

Чтобы увидеть кодировку таблицы, вы можете выполнить запрос SHOW CREATE TABLE tablename

0
Your Common Sense

использовать ILIKE

SELECT * FROM trees WHERE trees.`title` ILIKE '%Elm%';

у меня это сработало !!

0
ABS zarzis

Вам не нужно ALTER любой таблицы. Просто используйте следующие запросы перед фактическим запросом SELECT, для которого вы хотите использовать подстановочный знак:

    set names `utf8`;
    SET COLLATION_CONNECTION=utf8_general_ci;
    SET CHARACTER_SET_CLIENT=utf8;
    SET CHARACTER_SET_RESULTS=utf8;
0
Lopofsky