Проблема с поиском или кодировкой...

Sufir

Я не волшебник, я только учусь
Проблема с регистром...

Здравствуйте, товарищи!
В документации указано "Поиск выполняется без учета регистра символов.", однако следующие запросы возвращают 0 совпадений:
Код:
SELECT * FROM Phones WHERE MATCH (Title, Address) AGAINST ("Комбинат") LIMIT 100
SELECT * FROM Phones WHERE Title LIKE "к%"
А такие - восемь:
Код:
SELECT * FROM Phones WHERE MATCH (Title, Address) AGAINST ("КОМБИНАТ") LIMIT 100
SELECT * FROM Phones WHERE Title LIKE "К%"
В базе хранится именно "КОМБИНАТ", однако может оказаться и "Комбинат" и нужно выдать пользователю и то и другое. При чем не зависимо кирилица или нет, т.е. "factory" не находит, а "FACTORY" без проблем. Пробовал на версиях MySQL 4.1 и 5. Через phpMyAdmin вообще ни как не находит, к стати. Пробовал SET NAMES utf8 - эффекта нуль.
Данные хранятся в UTF-8, не в этом ли причина? Подскажите решение, если таковое есть, кто знает или ссылочку где почитать.

И еще вопрос, как преобразовать строку в кодировке utf8, например в верхний регистр? strtoupper работаеn не корректно, вместо "КОМБИНАТ" возвращает "ЊЎЌБИЍЀС". И вообще функции обработки строк. strlen возвращает неверную длинну, но при этом substr работает корректно.
 

Sufir

Я не волшебник, я только учусь
Значит без mbstring никуда... Это понятно, а по основному вопросу?
 

Sufir

Я не волшебник, я только учусь
Нет, не BINARY.

Попробовал такое преобрязование, до этого оказывается таблица cp1251 была, хотя база utf8:
Код:
ALTER TABLE`Phones` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci
"КОМБИНАТ" по прежнему находит нормально, а по запросу "Комбинат" находит три десятка строк в которых нет ни "Комбинат" ни "КОМБИНАТ".

-~{}~ 16.10.07 02:13:

И кстати, как бы почитать что здесь написано http://phpclub.ru/faq/Mysql41Rus? В какой кодировке страница?
Как ни открывал - "кракозябры" сплошные.

-~{}~ 16.10.07 08:32:

Значит никто не в курсе? Ладно и на том списибо.
 

Wicked

Новичок
У отдельных столбцов тоже может быть определена кодировка. Проверь.
 

Nogrogomed

Новичок
Знакомая ситуация. Перепроверь все кодировки. Если все даные хранятся в УТФ8, то и ты должен подключаться в утф8.

Пример: у сотрудника база была в cp1251
он подключался, ложил туда текст УТФ

При выборках - текст выводился нормально, но при поиске начинались глюки.

Перевели все типы таблиц в утф8 и после этого переписали данные в утф8. После этого поиск запахал.
 

Sufir

Я не волшебник, я только учусь
Снес все таблицы и создал заново. Везде поставил utf8_unicode_ci, сами таблицы и все поля в таблицах.
База Language: Russian (ru-utf8), MySQL-кодировка: UTF-8 Unicode (utf8), Сопоставление соединения с MySQL: utf8_unicode_ci.

По прежнему ищет с учетом регистра, но теперь возвращает строки такого вида "КОМБ�?НАТ".

С SET NAMES utf8 результат тот же.
mysql_client_encoding() возвращает latin1.
 

Sufir

Я не волшебник, я только учусь
без SET NAMES utf8
character_set_client cp1251
character_set_connection cp1251
character_set_database utf8
character_set_results cp1251
character_set_server cp1251
character_set_system utf8
character_sets_dir "/usr/share/mysql/charsets/"

после SET NAMES utf8
только character_set_server в cp1251 остальные в utf8

?!

Спасибо огромное, Wicked! Всё сделал. Как раз этот толчок мне и нужен был. А то сижу уже несколько дней, четвертый раз перечитываю "Если у вас MySQL 4.x/5.x и ЛЮБЫЕ ПРОБЛЕМЫ С РУССКИМ - ЧИТАТЬ ЭТО!". Там свалка какая-то, ничерта не разобрать. Может кто нормальный мануал написал бы. Я же так понимаю, там, в общем-то, о том же?..
Удалил все таблицы. Создал заново указав везде utf8_unicode_ci. Перезалил содержимое. Добавил везде SET NAMES utf8. Теперь работает как положено.
 
Сверху