Я использую REGEXP
для поиска в БД MySQL, но он не возвращает правильные данные, когда я вставляю '
(апостроф) и -
(тире) в поисковый запрос.
Есть ли какое-либо решение для этого?
Вот полный запрос:
select * from table where (field REGEXP 'SAN DIEGO | SAN DIEGO |^SAN DIEGO' or field2 REGEXP 'SAN DIEGO | SAN DIEGO |^SAN DIEGO' )
Если ваши строковые разделители REGEXP являются одинарными кавычками, избегайте их в строке. Кроме того, в зависимости от вашей бизнес-логики и структуры таблицы вы можете сделать CONCAT для уплотнения оператора:
SELECT field1, field2
WHERE CONCAT( field1, field2 ) REGEXP 'Mary\ Restaurant'
Если вы используете тире внутри класса символов, либо избегайте его, либо делаете его первым элементом в классе, поэтому движок не считает, что вы пытаетесь указать диапазон:
... REGEXP 'Mary\'s[- _]Restaurant'
Если вы используете пример Сан-Диего, вы можете уменьшить REGEXP, используя границы слов:
SELECT field1, field2
WHERE CONCAT( field1, field2 ) REGEXP '[[:<:]]SAN DIEGO[[:>:]]'
Смотрите: MySQL 5.1 Руководство REGEXP
Вы помещали символы в квадратные скобки? Попробуйте что-то вроде этого:
select * from Table where Field regexp '[\'-]'