Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кракозябры при выводе русского текста, не могу разобраться с кодировкой базы 
:(
    Опции темы
ashtone
Дата 25.4.2013, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вобщем пишу прогу на Visual C++ 2008...  подключаю к ней базы данных MySql (использую версию 5.5)...  так при выводе русского текста из базы получаю кракозябры вместо того что лежит в базе...  понимаю что дело в несовпадении кодировки..  но как это исправить не пойму, уже неделю бъюсь над этой проблемой...  вобщем создал 2 разные базы с 2 кодировками "cp1251" и "utf8"...  это не помогло..  как решить проблему??? или может кто скинет свой пример базы, может попробовать установить похожую кодировку?? 

Вот вариант базы с utf8 кодировкой..  вывод текста в Visual -  кракозябрами
 user posted image

А это вариант с cp1251, тескт выводится так же...  причем те же символы, вывод текста обсалютно не меняется
user posted image
PM MAIL   Вверх
bars80080
Дата 25.4.2013, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



многое ещё зависит от того, как вы внесли данные. сам-то клиент mysql (командная строка) работает в кодировке cp866.
поэтому, если вы вносили данные через клиент, а смотрите в visual или вносили данные через visual, а смотрите в клиенте, то кракозябры вполне логичны
PM MAIL WWW   Вверх
ashtone
Дата 25.4.2013, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(bars80080 @ 25.4.2013,  15:09)
многое ещё зависит от того, как вы внесли данные. сам-то клиент mysql (командная строка) работает в кодировке cp866.
поэтому, если вы вносили данные через клиент, а смотрите в visual или вносили данные через visual, а смотрите в клиенте, то кракозябры вполне логичны

Тоесть что бы у меня данные в базе лежали действительно в utf8 мне перед внесением данных в базу необходимо выполнить команду  "set character_set_client=utf8;" ??? тем самым указать что данные от клиента поступают в соответствующей кодировке...   а так, даже не зависимо от того что практически везде стоит utf8, данные лежат в cp866??...   

Данные будут поступать и при внесении из самого MySql (консоли).. и из Visual..

Данные я просматриваю через Visual...  как правильно создать базу, что бы всё отображалось как надо??  



Это сообщение отредактировал(а) ashtone - 25.4.2013, 15:43
PM MAIL   Вверх
bars80080
Дата 25.4.2013, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



точно сказать не могу (вообще, не понял, как оказался в разделе С)

обычно, внесение и чтение идёт либо оттуда, либо отсюда. к примеру, если программа заточена на работу с пользователем, то к консоли его никто не подпускает

если же в общем, то для работы с базой из проги, обычно хватает указания:
Код

SET NAMES `utf8`


чтобы нормально обозреть эти данные в клиенте, надо указать вначале работы кодировку клиента:
Код

SET NAMES `cp866`


PM MAIL WWW   Вверх
ashtone
Дата 25.4.2013, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(bars80080 @ 25.4.2013,  17:01)
точно сказать не могу (вообще, не понял, как оказался в разделе С)

обычно, внесение и чтение идёт либо оттуда, либо отсюда. к примеру, если программа заточена на работу с пользователем, то к консоли его никто не подпускает

если же в общем, то для работы с базой из проги, обычно хватает указания:
Код

SET NAMES `utf8`


чтобы нормально обозреть эти данные в клиенте, надо указать вначале работы кодировку клиента:
Код

SET NAMES `cp866`

Вот в том то и проблема....   "Set names cp1251" - не помогает...  драйвер ODBC вообще этот запрос не потдерживает, спасался  "set character_set_client=utf8;" и ему подобными, вставлял в код С++ перед открытием таблицы базы данных...  это ничем не помогало.. единстенное что менялись одни кракозябры на другие..  в самой базе все отображается как надо...

Вобщем от базы мне требуется только вывод данных..  не сортировки, не поиска по тексту не будет...  только вот с выводом текста в Visual получается огромная проблема которая практически никак не решается..



PM MAIL   Вверх
bars80080
Дата 25.4.2013, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



странное дело. я конечно в ODBC не шарю, но по логике, запрос должен прямо без лишних обработок закидываться в СУБД. может есть какая функция, позволяющая напрямую пуляться в СУБД?
PM MAIL WWW   Вверх
ashtone
Дата 25.4.2013, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(bars80080 @ 25.4.2013,  17:45)
странное дело. я конечно в ODBC не шарю, но по логике, запрос должен прямо без лишних обработок закидываться в СУБД. может есть какая функция, позволяющая напрямую пуляться в СУБД?

Функци для обращения на прямую есть....  только вот она то и не потдерживает "Set names"...  насколько я знаю "set names" это набор запросов "set character_set_client;"  и подобные...  поэтому кидаю в sql эти запросы, а именно:

character_set_client - кодировка в которой идет запрос от клиента к серверу
character_set_results - кодировка в которой отправляются ответы от сервера к клиенту
character_set_connection;

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

Получается вся суть в правильном написании БД..




PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




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


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

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