Я посмотрел вокруг и не нашел то, что я был после, так что здесь идет.
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
Это работает нормально, но не в том случае, если дерево называется Elm или ELM и т.д ...
Как сделать SQL нечувствительным к регистру для этого поиска по шаблону?
Я использую MySQL 5 и Apache.
mysql
sql
sql-like
case-insensitive
Дэвид Морроу
источник
источник
BINARY
like
должен быть нечувствительным к регистру по умолчанию.Ответы:
На самом деле, если вы добавите
COLLATE UTF8_GENERAL_CI
определение столбца, вы можете просто пропустить все эти приемы: он будет работать автоматически.Это также перестроит все индексы в этом столбце, чтобы их можно было использовать для запросов без начального «%».
источник
COLLATE UTF8_GENERAL_CI
определение столбца, вы можете просто пропустить все эти приемы: он будет работать автоматически.ALTER TABLE trees MODIFY COLUMN title VARCHAR(…) CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI
, Это также перестроит все индексы в этом столбце, чтобы их можно было использовать для запросов без начального «%».Я всегда решал это с помощью ниже:
источник
Чувствительность к регистру определяется в настройках сопоставления столбцов / таблиц / базы данных. Вы можете выполнить запрос в соответствии с определенным сопоставлением следующим образом:
например.
(Замените
utf8_general_ci
на любое сопоставление, которое вы считаете полезным)._ci
Означает нечувствительны к регистру .источник
utf8_general_ci
работает нормально, хотя.COLLATE
либо сделать такой простой трюк, как этот (LOWER()
обе ваши строки перед сравнением)SELECT * FROM products WHERE name COLLATE utf8_general_ci LIKE 'AB47TU';
Это пример простого запроса LIKE:
Теперь без учета регистра с помощью функции LOWER ():
источник
COLLATE
проблемами форматированияПросто используйте:
Или использовать
Обе функции работают одинаково
источник
Я делаю что-то подобное.
Получение значений в нижнем регистре, а MySQL сделает все остальное
И для MySQL PDO Альтернатива:
источник
Я думаю, что этот запрос будет делать поиск без учета регистра:
источник
использование
ILIKE
у меня это сработало !!
источник
Вам не нужно
ALTER
ни одного стола. Просто используйте следующие запросы перед фактическимSELECT
запросом, который вы хотите использовать подстановочный знак:источник
хорошо в mysql 5.5, оператор like нечувствителен ... поэтому, если ваш vale - elm или ELM или Elm или eLM или любой другой, и вы используете как "% elm%", он перечислит все совпадающие значения.
Я не могу сказать о более ранних версиях MySQL.
Если вы заходите в Oracle, например, работаете с учетом регистра, поэтому, если вы наберете «% elm%», он пойдет только на это и проигнорирует прописные буквы.
Странно, но так оно и есть :)
источник
*_ci
«без учета регистра». Поскольку это происходит по умолчанию для всех поддерживаемых наборов символов (show character set;
проверьте это), ответ частично верен :-) Только причина неверна. Это не оператор, который учитывает регистр, это сопоставление по умолчанию.источник
Вы должны установить правильную кодировку и сопоставление для ваших таблиц.
Кодировка таблицы должна отражать фактическую кодировку данных. Какая у вас кодировка данных?
Чтобы увидеть кодировку таблицы, вы можете выполнить запрос
SHOW CREATE TABLE tablename
источник
Когда я хочу разработать нечувствительный регистр поиска, я всегда конвертирую каждую строку в нижний регистр, прежде чем делать сравнение
источник
Вы можете использовать следующий метод
используйте этот метод, как показано ниже
источник
Недвоичные сравнения строк (включая
LIKE
) по умолчанию не чувствительны к регистру в MySql: https://dev.mysql.com/doc/refman/en/case-sensitivity.htmlисточник