| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Базы данных > Кракозябры при выводе русского текста |
| Автор: ashtone 25.4.2013, 14:47 |
| Вобщем пишу прогу на Visual C++ 2008... подключаю к ней базы данных MySql (использую версию 5.5)... так при выводе русского текста из базы получаю кракозябры вместо того что лежит в базе... понимаю что дело в несовпадении кодировки.. но как это исправить не пойму, уже неделю бъюсь над этой проблемой... вобщем создал 2 разные базы с 2 кодировками "cp1251" и "utf8"... это не помогло.. как решить проблему??? или может кто скинет свой пример базы, может попробовать установить похожую кодировку?? Вот вариант базы с utf8 кодировкой.. вывод текста в Visual - кракозябрами ![]() А это вариант с cp1251, тескт выводится так же... причем те же символы, вывод текста обсалютно не меняется ![]() |
| Автор: bars80080 25.4.2013, 15:09 |
| многое ещё зависит от того, как вы внесли данные. сам-то клиент mysql (командная строка) работает в кодировке cp866. поэтому, если вы вносили данные через клиент, а смотрите в visual или вносили данные через visual, а смотрите в клиенте, то кракозябры вполне логичны |
| Автор: ashtone 25.4.2013, 15:22 | ||
Тоесть что бы у меня данные в базе лежали действительно в utf8 мне перед внесением данных в базу необходимо выполнить команду "set character_set_client=utf8;" ??? тем самым указать что данные от клиента поступают в соответствующей кодировке... а так, даже не зависимо от того что практически везде стоит utf8, данные лежат в cp866??... Данные будут поступать и при внесении из самого MySql (консоли).. и из Visual.. Данные я просматриваю через Visual... как правильно создать базу, что бы всё отображалось как надо?? |
| Автор: bars80080 25.4.2013, 17:01 | ||||
| точно сказать не могу (вообще, не понял, как оказался в разделе С) обычно, внесение и чтение идёт либо оттуда, либо отсюда. к примеру, если программа заточена на работу с пользователем, то к консоли его никто не подпускает если же в общем, то для работы с базой из проги, обычно хватает указания:
чтобы нормально обозреть эти данные в клиенте, надо указать вначале работы кодировку клиента:
|
| Автор: ashtone 25.4.2013, 17:40 | ||||||
Вот в том то и проблема.... "Set names cp1251" - не помогает... драйвер ODBC вообще этот запрос не потдерживает, спасался "set character_set_client=utf8;" и ему подобными, вставлял в код С++ перед открытием таблицы базы данных... это ничем не помогало.. единстенное что менялись одни кракозябры на другие.. в самой базе все отображается как надо... Вобщем от базы мне требуется только вывод данных.. не сортировки, не поиска по тексту не будет... только вот с выводом текста в Visual получается огромная проблема которая практически никак не решается.. |
| Автор: bars80080 25.4.2013, 17:45 |
| странное дело. я конечно в ODBC не шарю, но по логике, запрос должен прямо без лишних обработок закидываться в СУБД. может есть какая функция, позволяющая напрямую пуляться в СУБД? |
| Автор: ashtone 25.4.2013, 18:04 | ||
Функци для обращения на прямую есть.... только вот она то и не потдерживает "Set names"... насколько я знаю "set names" это набор запросов "set character_set_client;" и подобные... поэтому кидаю в sql эти запросы, а именно: character_set_client - кодировка в которой идет запрос от клиента к серверу character_set_results - кодировка в которой отправляются ответы от сервера к клиенту character_set_connection; и устанавливаю для них нужную кодировку.... только всё безрезультатно... при смене кодировок меняются только кракозябры.. а если меняются кракозябры, значит запрос работает... Получается вся суть в правильном написании БД.. |