У меня есть полностью utf-ная mysql база, с utf табличками и utf полями.
Вот что в SHOW VARIABLES: character set client utf8
character set connection utf8
character set database utf8
character set results utf8
character set server utf8
character set system utf8
collation connection utf8_general_ci
collation database utf8_general_ci
collation server utf8_general_ci
В конфиге sphinx: sql_query_pre = SET NAMES utf8
sql_query_pre = SET CHARACTER SET utf8
В секции index'a конфига sphinx (charset_table — дефолтная из мануала для charset_type utf-8): charset_type = utf-8
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
Но даже с учетом всего этого в результатах поиска вопросы вместо русских символов.
При этом если сделать xml файлики и получать данные через xmlpipe2, то ищет как надо и русские символы показывает, то есть скорее всего данные от базы уже приходят с вопросами.
Не подскажите ли, где и что я еще мог забыть?
Всем спасибо, разобрался. Как выяснилось, даже при выставленных везде и всюду utf, данные сфинкс получает все равно в какой-то другой, видимо latin1 кодировке. Помогло SET NAMES 'utf8' (именно с кавычками). Теперь замечательно работаю с дополнительными данными, а не только с ID документов, таким образом для поиска вообще не трогаю базу данных.
Да, выполняю /usr/bin/search text — выдает результаты, но вместо русских символов вопросы, по русским словам вообще не ищет. Если выбрать источник xmlpipe2 и вместо sql запроса вывести данные в xml файл, то находит замечательно. Но, как я уже говорил, — все абсолютно переменные для соединения с базой и хранения строковых данных выставлены в utf, но почему-то из mysql получает все равно вопросы.
Сфинкс должен возвращать только id документов, а результаты поиска по ним вы должны сами генерировать.
В принципе, для использования сфинкса через консоль он позволяет также выводить какую-то информацию в качестве результата запроса, но это только для тестов и доступно только через консоль.
Когда вы начнете использовать сфинкс в своем проекте — вам придется работать с id документов, и соответственно сфинкс не будет возвращать никаких букв, ни русских, ни английских.
Примерно такой код выведет результаты с атрибутами. У меня среди атрибутов заголовок материала и другие текстовы данные, во-первых, по ним не ищется, во-вторых в них вместо русских символов вопросы: $cl = new SphinxClient();
$cl->SetServer( "localhost", 3312 );
$cl->SetMatchMode( SPH_MATCH_ANY );
$arrResult = $cl->Query($_REQUEST['text']);
foreach ($arrResult['matches'] as $elem) {
print_r($elem); echo '
';
}
А как возврат сниппетов? Здесь одним id не обойтись.
В файле my.ini (для MySQL) в любых параметрах не должно быть иной кодировки кроме как utf-8.
Обрежь также права пользователя БД (есть такой прикол).