Я осмотрел некоторых и не нашел то, чем я был после, таким образом, здесь идет.
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
Это хорошо работает, но не, если дерево называют Вязом или ELM и т.д...
Как я делаю SQL нечувствительным к регистру для этого подстановочного поиска?
Я использую MySQL 5 и Apache.
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.
Это также перестроит все индексы в этом столбце, чтобы их можно было использовать для запросов без начала "%"
Я всегда решал эту проблему с помощью lower:
SELECT * FROM trees WHERE LOWER( trees.title ) LIKE '%elm%'
Вы должны настроить правильную кодировку и сортировку для своих таблиц.
Кодировка таблицы должна отражать фактическую кодировку данных. Какая у вас кодировка данных?
Чтобы увидеть кодировку таблицы, вы можете выполнить запрос SHOW CREATE TABLE имя_таблицы
Когда я хочу разработать поиск без учета регистра, я всегда конвертирую каждую строку в нижний регистр перед выполнением сравнения
Чувствительность к регистру определяется в параметрах сортировки столбцов / таблиц / базы данных. Вы можете выполнить запрос при определенном сопоставлении следующим образом: например,
SELECT *
FROM trees
WHERE trees.`title` LIKE '%elm%' COLLATE utf8_general_ci
.
(Замените utf8_general_ci
любым параметром сортировки, который сочтете полезным). _ci
означает без учета регистра .