Ответ 1
использовать LOWER в обоих (столбец и слово поиска). Сделав это, вы убедитесь, что даже если в запросе есть что-то вроде% VaLuE%, это не имеет значения.
select qt.*
from query_table qt
where LOWER(column_name) LIKE LOWER('%vAlUe%');
Я пытаюсь выполнить запрос sql:
select * from table where column like '%value%';
Но данные сохраняются как "Значение" (V является капиталом).
Когда я выполняю этот запрос, я не получаю никаких строк. Как сделать вызов таким образом, что он ищет "значение" независимо от обложки символов?
использовать LOWER в обоих (столбец и слово поиска). Сделав это, вы убедитесь, что даже если в запросе есть что-то вроде% VaLuE%, это не имеет значения.
select qt.*
from query_table qt
where LOWER(column_name) LIKE LOWER('%vAlUe%');
Если вы хотите, чтобы этот столбец был нечувствительным к регистру:
ALTER TABLE `schema`.`table`
CHANGE COLUMN `column` `column` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
Таким образом, вам не нужно менять свой запрос.
И двигатель MySQL обработает ваш запрос быстрее, чем с помощью функции lower() или любых других трюков.
И я не уверен, что использование более низкой функции будет хорошим решением для производительности поиска индексов.
Либо используйте нечувствительную к регистру сортировку на вашей таблице, или заставляйте значения быть более строчными, например
WHERE lower(column) LIKE lower('%value%');
Используйте функцию lower()
:
select t.*
from table t
where lower(column) like '%value%';
Попробуйте использовать нечувствительную к регистру сортировку
select * from table
where column like '%value%' collate utf8_general_ci
вы должны использовать функцию ниже или верхняя, чтобы игнорировать случай, когда вы ищете какое-то поле, используя, например.
select * from student where upper(sname) like 'S%';
ИЛИ
select * from student where lower(sname) like 'S%';
Если вы используете PostgreSQL, более простым решением является использование нечувствительного типа (ILIKE):
SELECT * FROM table WHERE column ILIKE '%value%'