MySQL совпадает с косой чертой
У меня возникли некоторые проблемы с поиском продуктов, которые содержат косую черту (например, ac/dc) с соответствием mysql.
Кажется, на это влияют определенные параметры. На моем Windows XAMMP с настройками по умолчанию каждый из этих прекрасно работает:
MATCH (content) AGAINST ('+ac/dc*' IN BOOLEAN MODE)
а также
MATCH (content) AGAINST ("+ac/dc*" IN BOOLEAN MODE)
а также
MATCH (content) AGAINST ('"+ac/dc*"' IN BOOLEAN MODE)
а также
MATCH (content) AGAINST ("'+ac/dc*'" IN BOOLEAN MODE)
а также
MATCH (content) AGAINST ('+ac\/dc*' IN BOOLEAN MODE)
Но ни один из них не работает на нашем производственном сервере, который находится в системе Linux (я не знаю, какой дистрибутив, но он находится под plesk).
И что я имею в виду под "не работать". Запрос возвращает 0 строк. Производственный сервер имеет значение ft_min_word как 2.
2 ответа
Это была проблема с сервером, по сей день я до сих пор не знаю, как мне это исправить, что я сделал, изменилось то, как работает вся система.
У меня есть таблица поиска, в которой я храню слова поиска, там я удаляю косые черты, чтобы AC/DC становился ACDC, и при поиске я изменяю запрос, чтобы снова удалить косую черту, чтобы он пытался сопоставить ACDC и находить правильную строку.
Посмотрите на механизм хранения в XAMP и на производственном сервере. Существуют ограничения на полнотекстовый поиск http://dev.mysql.com/doc/refman/5.1/en/fulltext-restrictions.html. Кроме того, определения таблицы должны совпадать для полнотекстового поиска.
Косая черта не является специальным символом, хотя двойные кавычки есть. Так, +ac/dc*
должен дать другой набор результатов, чем "+ac/dc*"
например.
Кроме того, единственное различие, о котором я могу думать, было бы различным содержанием таблицы.