Название: Qt MySQL и русские символы Отправлено: bob от Октябрь 30, 2005, 18:24 В БД (MySQL) данные хранятся в кодировке ср1251, на консоли отображаются без проблем, а если загружаю данные с помощью программы написанной на Qt, то все выводится разными некузявыми значками.:shock: Кто ни будь разруливал это проблему? Поделитесь опытом.
PS: MySQL и Qt и программа на нем писанная ходят под WindowsXP. Название: Qt MySQL и русские символы Отправлено: bob от Октябрь 30, 2005, 21:30 Я думал это проблема отбражения символов самим Qt, но при использовании БД Access ни каких проблем нет.
Название: Qt MySQL и русские символы Отправлено: Alexei от Октябрь 31, 2005, 10:33 У меня была такая же проблема: дома все работает нормально, на работе - нет. Оказалось, что если сервер MySQL находится в папке
C:\mysql то все путем. На работе у нас сервер конечно же стоит на отдельной машине да еще под Linux. Если сервер находится не в папке C:\mysql, то кодировка не работает. Подсмотрев исходники, я выяснил, что кодировка устанавливается в файле qsql_mysql.cpp с помощью функции mysql_character_set_name, которая ищет файл с кодировкой в папке !!! C:\mysql. А если там не находит, что естественно для машин, на которых нет сервера да еще в папке C:\mysql, то выставляет codecForLocale(), который является latin1. Я решил проблему закоментировав соответствующие строчки и пересобрав библиотеку QtSql4.dll. Такое решение я считаю неприемлимым и думаю, что это trolltech должна исправить. Может, я не прав и у кого-то есть более подходящее решение? Название: Qt MySQL и русские символы Отправлено: Admin от Октябрь 31, 2005, 11:41 народ во первых пишите версию mysql
их уже 3 гуляет во вторых, в 4 например, клиент должен сказать серверу на какой кодировке общатся будем, сервер тоже может в разных кодировках хранить Название: Qt MySQL и русские символы Отправлено: bob от Октябрь 31, 2005, 17:04 Сервер MySQL 4.1 по умолчанию для него установлена ср1251 Qt 4.0.1.
А как из Кутешной проги серверу БД сообщить в какой кодировке сеанс будет не пойму, и кроме того Qt ведь использует latin1. Как это все обойти, или я что-то усложняю? Название: Qt MySQL и русские символы Отправлено: Alexei от Октябрь 31, 2005, 18:49 Admin, ты прав, извини. Я все писал про MySQL 4.0.18.
Возможно, функция mysql_character_set_name в версии 4.1.0 и выше работает корректно. Название: Qt MySQL и русские символы Отправлено: Admin от Октябрь 31, 2005, 19:29 Цитата: "bob" А как из Кутешной проги серверу БД сообщить в какой кодировке сеанс будет не пойму, и кроме того Qt ведь использует latin1. Как это все обойти, или я что-то усложняю? Там исользуется SQL запрос. Читать тут mysql.com Название: Qt MySQL и русские символы Отправлено: bob от Октябрь 31, 2005, 22:45 При установлении соединения с БД выполняю
Код: query.execute("SET NAMES 1251"); Выводимые символы изменяются, но по прежнему остаются некузявыми. Название: Qt MySQL и русские символы Отправлено: Admin от Ноябрь 01, 2005, 10:41 вот уже лучше
теперь в какой кодировке символы выводятся на экран наверно в UTF? сохрани вывод из базы данных в файл и увидишь в какой кодировке они идут в программу Название: Qt MySQL и русские символы Отправлено: alexis от Ноябрь 01, 2005, 11:23 Установить локаль нужно правильно :)
QTextCodec *codec=QTextCodec::codecForName("utf8"); QTextCodec::setCodecForLocale(codec); QTextCodec::setCodecForCStrings(codec); Название: Qt MySQL и русские символы Отправлено: bob от Ноябрь 01, 2005, 13:45 Ситуация следующая:
Первые три записи добавлены в ТБД непосредственно из shell MySQL после команды SET NAMES utf8. Последняя добавлена из программы написанной на Qt с переданным вБД параметром SET NAMES utf8. При установке SET NAMES utf8 в shell MySQL первые три записи отображаются правильно, последняя отображается нечитабельными символами (кодировку менял на все которые только поддерживает MySQL). При просмотре ТБД из программы написанной на Qt ни одна запись не отображается правильно. В заголовке окна выведен текст для того чтобы быть уверенным, что локаль установлена в ср1251. Все вышеописанное запускается под управлением WindowsXP. Код: #include "vwdb.h" Название: Qt MySQL и русские символы Отправлено: bob от Ноябрь 01, 2005, 13:53 В образце кода указано INSERT INTO person(id, status) - это опечатка. В оригинале стоит TestTable .
Название: Qt MySQL и русские символы Отправлено: crocus от Ноябрь 08, 2005, 04:08 А что ничего нового нет в решении проблемы.
Название: Qt MySQL и русские символы Отправлено: Werewolf1 от Ноябрь 14, 2005, 13:48 вместо
query.bindValue(":status", "Гость"); надо пистать query.bindValue(":status", tr("Гость")); так как Qt работает с юникодом Название: Qt MySQL и русские символы Отправлено: Werewolf1 от Ноябрь 14, 2005, 13:57 Я использоваю Qt3 и MySql 4.1.9 проверял следующим кодом
bool createConnection() { QSqlDatabase *db = QSqlDatabase::addDatabase("QMYSQL3"); db->setHostName("localhost"); db->setDatabaseName("testDB"); db->setUserName("root"); db->setPassword("rootpass"); if (!db->open()) { db->lastError().showMessage(); return false; } QSqlQuery query(db); query.exec("SET CHARACTER SET utf8"); return true; } void addRecord() { QSqlQuery query; QSqlDatabase::database()->transaction(); query.prepare("INSERT INTO tb_component (description) " "VALUES (:description)"); query.bindValue(":description", QObject::tr("текст в кодировки ср1251")); query.exec(); QSqlDatabase::database()->commit(); } int main(int argc, char *argv[]) { QApplication app(argc, argv); QTextCodec::setCodecForTr( QTextCodec::codecForName("utf8") ); QTextCodec::setCodecForCStrings( QTextCodec::codecForName("utf8") ); if (!createConnection()) return 1; addRecord(); return app.exec(); } Название: Qt MySQL и русские символы Отправлено: crocus от Ноябрь 24, 2005, 09:28 Отличные новости в архиве PHP 5.0.5 (zip под Винду) есть библиотека
libmysql.dll и с ней проблемы русских символов отсутствуют. Кажется там добавили mysql_set_charset или что-то типа этого (из changelog PHP), если я правильно понял. Название: Qt MySQL и русские символы Отправлено: bob от Ноябрь 26, 2005, 19:18 Цитата: "crocus" Отличные новости в архиве PHP 5.0.5 (zip под Винду) есть библиотека libmysql.dll и с ней проблемы русских символов отсутствуют. Где лежит данный zip? Название: Qt MySQL и русские символы Отправлено: crocus от Ноябрь 28, 2005, 06:35 webfile.ru/658276
Размести ссылку на файл в собственном дневнике или блоге >> Имя файла - libmysql.zip , размер 544 Кбайт. Файлу присвоен номер 658276, он будет доступен до 05.12.2005 06:33. Название: Qt MySQL и русские символы Отправлено: oktogen от Ноябрь 28, 2005, 11:04 Я так понял, пороблема решена?
Название: Qt MySQL и русские символы Отправлено: oktogen от Ноябрь 28, 2005, 11:44 Тут возникает следующая штуковина:
В запросах нельзя вообще использовать русский текст. Ругается, что ему не хватает места. Кто сталкивался с такой ошибкой? Название: Qt MySQL и русские символы Отправлено: Jkc от Ноябрь 28, 2005, 23:54 Фаил main.cpp
#include <qapplication.h> #include "form1.h" #include <qtextcodec.h> int main( int argc, char ** argv ) { QTextCodec *codec=QTextCodec::codecForName("CP-1251",0); QTextCodec::setCodecForCStrings(codec); QApplication a( argc, argv ); Form1 w; w.show(); a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) ); return a.exec(); } Фаил подключения к БД MySQL #include <qtextcodec.h> #include <qsqldatabase.h> #include "connection.h" bool createConnections2() { QTextCodec *codec=QTextCodec::codecForName("CP-1251",0); QTextCodec::setCodecForCStrings(codec); // Firebird QSqlDatabase *oracle = QSqlDatabase::addDatabase( DB_ORDERS_DRIVER ); oracle->setDatabaseName( DB_ORDERS_DBNAME ); oracle->setUserName( DB_ORDERS_USER ); oracle->setPassword( DB_ORDERS_PASSWD ); oracle->setHostName( DB_ORDERS_HOST ); if ( ! oracle->open() ) { qWarning( "Failed to open orders database: " + oracle->lastError().text() ); return FALSE; } return TRUE; } Вот и всё. |