Доброго времени суток!
Возникла проблема в настройке свежей на данный момент версии ajaxSearch 1.9.1. Если включить параметр &advSearch=`exactphrase`, то на русском в кодировке UTF-8 слова не ищет, а на английском все ок.
В базе кодировка UTF-8, страницы тоже.
Пожалуйста помогите, кто что знает по этой проблеме.
ага! ф-л asPhxParser.class.inc.php строка 59. формирует запрос вида SELECT sc.id, sc.pagetitle, sc.longtitle, sc.description, sc.alias, sc.introtext, sc.template, sc.menutitle, sc.content, sc.publishedon FROM `dddd_site_content` sc WHERE ((sc.published=1) AND (sc.searchable=1) AND (sc.deleted=0) AND (sc.privateweb=0)) GROUP BY sc.id HAVING (((sc.content REGEXP ’kimi wa’) OR (sc.pagetitle REGEXP ’kimi wa’) OR (sc.longtitle REGEXP ’kimi wa’))) ORDER BY sc.publishedon,sc.pagetitle
стоит только вместо kimi wa вбить что-то на русском - ничего не ищет (тестирую в phpmyadmin)
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
Warning
The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multi-byte safe and may produce unexpected results with multi-byte character sets. In addition, these operators compare characters by their byte values and accented characters may not compare as equal even if a given collation treats them as equal.
Quote from: daima at Nov 06, 2010, 06:24 AM
Попробовал REGEXP заменить на like %слово% - увы(((. А счастье было так близко
Что-то неправильно делаете… При использовании REGEXP все должно работать … за исключением проверки прописных и строчных букв. То есть, если запрос точно соответствует фразе в базе, все найдется, а если регистр не совпадает – нет. При замене на LIKE ищется верно во всех случаях. Для примера попробовал такой запрос:
SELECT sc.id, sc.pagetitle, sc.longtitle, sc.description, sc.alias, sc.introtext, sc.template, sc.menutitle, sc.content, sc.publishedon FROM `modx_site_content` sc WHERE ((sc.published=1) AND (sc.searchable=1) AND (sc.deleted=0) AND (sc.privateweb=0)) GROUP BY sc.id HAVING (((sc.content LIKE '%информация оБ авторе%') OR (sc.pagetitle LIKE '%информация оБ авторе%') OR (sc.longtitle LIKE '%информация оБ авторе%'))) ORDER BY sc.publishedon,sc.pagetitle
И все сработало правильно (в базе есть текст «Информация об авторе» и «информация об авторе»).
не мы, а программа. сейчас попробовал в phpmyadmin запрос прогнать - работает
Еще, возможно, из-за выбора способа "сопряжения кодировок" (термин некорректный, однако, суть, думаю, ясна):
Set names
Set charset
в самом начале при установке. На 100% не уверен, но проверить не так долго.
Удачи!
так у кого то получилось исправить проблему с поиском рускоязычных фраз?
если да то подскажите куда копать?