Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Великий русский в MySQL! Как добиться 100% корректности? 
:(
    Опции темы
Glorious
Дата 28.3.2005, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.3.2005

Репутация: нет
Всего: нет



Добрый вечер!

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

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


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

Код

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


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

Здесь уже поднималась тема, близкая к данной сортировка Order By, по столбцу с русским текстом.

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

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


PM MAIL   Вверх
Mal Hack
Дата 28.3.2005, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Код
[mysqld]
default-character-set=cp1251

В my.ini или conf
PM ICQ   Вверх
Kesh
Дата 28.3.2005, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



Цитата
collation cp1251_general_ci
именно оно отвечает за сравнения...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 28.3.2005, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Kesh
А это куда? И в чем именно "отвечает"? Т.е. дефолтная кодировка для сравнений или как?
PM ICQ   Вверх
Glorious
Дата 28.3.2005, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.3.2005

Репутация: нет
Всего: нет



Ребята!

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

select 'б' = 'в';

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

Делитесь!
PM MAIL   Вверх
DENNN
Дата 29.3.2005, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 2
Всего: 43



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

select 'б' = 'в';

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

[DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]


Это сообщение отредактировал(а) DENNN - 29.3.2005, 08:54
PM ICQ   Вверх
Glorious
Дата 29.3.2005, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.3.2005

Репутация: нет
Всего: нет



Все началось именно с версий 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 - но это же нехорошо...
Что я делаю не так?
Спасибо!
PM MAIL   Вверх
DENNN
Дата 29.3.2005, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 2
Всего: 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)
Любой из этих способов делал одно - символы действительно корректно отображались, но сортировка не работала...

Что еще раз говорит в пользу предположении об отсутствии поддержки именно в твоем дистрибутиве либо испорченных служебных файлах.
PM ICQ   Вверх
Cetus
Дата 4.4.2005, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 18.4.2004

Репутация: 1
Всего: 1



в %Windows%\My.ini пропиши
default-character-set=win1251

--------------------
Легко внести изменения в код.Трудно сделать это корректно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0473 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.