SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.10.2009 22:20:21

cutecode
Участник
Зарегистрирован: 02.10.2009
Сообщений: 3

Опять utf8

Моя программа написанная на C++ поддерживает 2 базы данных: MS Acces и MySql.
При старте программы пользователь сам решает с какой базой он желает работать.
Причем MySql работал с русской кодовой страницей cp1251, теперь появилась необходимость  перевести программу на Юникод.

Я перекомпелировал программу под Юникод, теперь в самой программе все нормально, т.к. при записи в файл латышских символов, таких как "ūšščēž", они нормально считываются из файла,
именно так, как я их записал. К тому же при работе с базой данных MS Access, тоже все нормально, т.е если я пишу команду

Код:

insert into some_table (some_field) values ('ūšščēž');

они тоже считыватся и отображаются на экране именно так, как я их записал в базу.

Т.е. получается, что с моей программой, как "клиентсой программой", вроде бы все нормально.

Но вот при работе с MySql ничего не получается.
Если я посылаю в MySql указанную выше команду, то в ответ я получаю не латышские символы ūšščēž, а их прототипы usscez.

Теперь что я сделал с Mysql.

1. сразу после установки соединения с MySql, я выполняю команды

Код:

SET NAMES utf8;
SET CHARACTER SET utf8;
set character_set_client='utf8';
set character_set_results='utf8';

после этого MySql возвращает мне всякую "гадость" типа Прием первичного пациента, оформление документации
команда

Код:

show variables like '%%char%%'

возвращает везде значения utf8, кроме character_set filesystem=binary

2. далее, я первожу базу данных, все таблицы и все поля в формат utf8

Код:

ALTER DATABASE `some_database` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE `some_table` DEFAULT CHARACTER SET utf8  COLLATE utf8_unicode_ci;
ALTER TABLE `some_table` CONVERT TO CHARACTER SET %s;
ALTER TABLE `some_table` CHANGE `some_field` `some_field` field_type  CHARACTER SET utf8  COLLATE cp1251_general_ci;

но Это не помогает, я попрежнему вижу всякую "гадость типа" Прием первичного пациента, оформление документации
Если пишу латышские символы, то попрежнему возвращается не то что надо.

Пробовал также сделать dump базы данных и затем заменить все символы cp1251 на utf8, и обратно загнать в базу. Опять не помогает.


Что я делаю не так?

спасибо

Неактивен

 

#2 04.10.2009 03:27:10

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Опять utf8

Ну, это не гадость. Когда Вы выполняете команду «SET NAMES utf8», Вы говорите MySQL
буквально следующее: «Я работаю в кодировке UTF8, поэтому будь добр посылай мне
данные в этой кодировке». Ваша программа же запущена в виндоус, где по умолчанию
стоит (да-да, правильно) cp1251 (или в юникодном случае ucs2). В результате получается,
что данные приезжают к Вам в utf8, а Вы ожидаете их в другой кодировке.

Решения два — или не обманывать MySQL и честно признаться, что Вы работаете не в utf8,
или обращаться со строками, приехавшими из MySQL, как со строками utf8 (и конвертировать
их внутри программы). Подозреваю, что первое заметно проще (SET NAMES ucs2).

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson