Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Великий русский в MySQL!


Автор: Glorious 28.3.2005, 18:27
Добрый вечер!

Не работает у меня сравнение русских символов. Помогите плиз разобраться. Версия MySQL 4.1.10. Путем долгих попыток, я определил, что среди всех маленьких символов русского алфавита, для MySQL символы 'б' и 'в' равны.
Запустите mysql.exe и напишите:
Код

set names cp1251; 
select 'б' = 'в';


ответом будет

Код

+-----------+ 
| 'в' = 'б' | 
+-----------+ 
|         1 | 
+-----------+


Т.е. эти символы равны. Для других символов все нормально. (Но среди больших букв есть также такие "глючные" символы, например 'А' и 'Р'.). Если же использовать koi8r, то в этой кодировке есть другие символы, которые тоже равны между собой.

Здесь уже поднималась тема, близкая к данной http://forum.vingrad.ru/index.php?showtopic=45685&st=15.

Другой трабл: LIKE выборка. Для английского текста, LIKE регистро-независим, а для русского - зависим! Нехорошо...

Кто-нибудь может поделиться знаниями?
Спасибо.


Автор: Mal Hack 28.3.2005, 18:37
Код
[mysqld]
default-character-set=cp1251

В my.ini или conf

Автор: Kesh 28.3.2005, 19:55
Цитата
collation cp1251_general_ci
именно оно отвечает за сравнения...

Автор: Mal Hack 28.3.2005, 20:03
Kesh
А это куда? И в чем именно "отвечает"? Т.е. дефолтная кодировка для сравнений или как?

Автор: Glorious 28.3.2005, 20:41
Ребята!

У меня все именно так и есть. Пожалуйста, выполните команду

select 'б' = 'в';

Тут не все так просто. Я уверен, что ответом сервера у Вас будет число 1 (см.выше). Только если у Вас ответ 0 - Вы счастливый человек! smile При установки кодировки cp1251 по умалчанию устанавливается collation cp1251_general_ci. Только лишь при collation cp1251_bin происходит корректное сравнение. Но это не есть удовлетворительное решение.

Делитесь!

Автор: DENNN 29.3.2005, 08:51
Когда руки кривые и документацию читать более лениво, чем спрашивать не такое бывает smile
Все прекрасно работает.
Специально для тебя сделал:
Код

select 'б' = 'в';

Результат - 0. (При этом чувствоал себя полным дураком, пока набирал.)
Ищи причины у себя, нечего на MySQL валить.
Проверь, что ты вообще корректно вбиваешь эту строку. Так если работаешь через терминал в котором русская кодировка не поддерживается, то он их заменит на одинаковую кроказябру.
Если ставил на винде - там не такие чудеса бывают.
Если посмотришь параметры запуска mysqld или, как тебе тут подсказывали, my.ini, то увидишь как задается кодировка по умолчанию.
Если откроешь документацию или зайдешь на сайт mysql, то можно найти массу внятной и доходчивой информации о локализации БД в mysql. В частности, начиная с версии 4.1 при создании таблицы существует параметр
Цитата

[DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]

Автор: Glorious 29.3.2005, 11:21
Все началось именно с версий 4.1.x. До этих версий я успешно работал с русскими кодировками. DENN, а у тебя действительно была версия 4.1.x, и у тебя стоит Винда?

У меня такие неккоректные сравнения происходят и из программ C/C++, и из терминала mysql.exe.

Кодировку я устаналивал всеми способами - и через my.ini, и через явную установку --defaults-file для сервиса mysql-nt.exe. Все эти установки аналогичны SQL командам
Код

set names cp1251;

либо
Код

set character set cp1251;

также (выполняя труд вышеуказанных команд) я вручную задавал каждую переменную, отвечающую за кодировку символов, такие как character_set_client и collation_connection и проч.

Любой из этих способов делал одно - символы действительно корректно отображались, но сортировка не работала... И чудеса с буквами ("б" и "в"). Конечно, сортировать можно и используя binary - но это же нехорошо...
Что я делаю не так?
Спасибо!

Автор: DENNN 29.3.2005, 11:43
Цитата(Glorious @ 29.3.2005, 11:21)
Все началось именно с версий 4.1.x

Цитата(Glorious @ 29.3.2005, 11:21)
и у тебя стоит Винда?

Дык, вот ты и расскажи как у тебя что стоит. Явно что ты просто где-то инсталлятор взял. Как твой mysql был собран ты знаешь? Включена ли была при сборке локаль cp1251? Есть ли в его служебных файлах файлы перекодировки для cp1251 и win1251(оставлены из соображений совместимости)? М.б. их прото нет или они повреждены?
Короче: откуда есть взялся твой сервер БД?
Отвечая на вопрос: нет, у меня винда не стоит. Более того, раз попробовав запустить сервер на *NIX, переходить обратно на винду очень не хочется smile


Цитата(Glorious @ 29.3.2005, 11:21)
Любой из этих способов делал одно - символы действительно корректно отображались, но сортировка не работала...

Что еще раз говорит в пользу предположении об отсутствии поддержки именно в твоем дистрибутиве либо испорченных служебных файлах.

Автор: Cetus 4.4.2005, 10:22
в %Windows%\My.ini пропиши
default-character-set=win1251

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)