Russian Qt Forum

Qt => Базы данных => Тема начата: bob от Январь 22, 2006, 15:06



Название: Кирилица
Отправлено: bob от Январь 22, 2006, 15:06
Данная тема уже поднималась мною в этом форуме, но так и не получила конструктивного завершения.

Используются
Qt 4.1.0
MySQL 4.1
OS WindowsXP Professional SR2

БД таблица и поля типа varchar, создаются с инструкцией DEFAULT CHARACTER SET utf8
При запуске программы выполняю

Код:

QTextCodec *codec;
codec=QTextCodec::codecForName("utf8");
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForTr(codec);


При соединении с БД
Код:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("mytest");
db.setUserName("root");
db.setPassword("57r80t10");
db.setHostName("localhost");

QSqlQuery query;
 query.exec("SET NAMES utf8");


Ввожу текстовое значение кирилическими символами (ни каких проблем с отображением символов нет) через поле ввода
Код:

query.prepare("INSERT INTO test(status) VALUES(:st)");
query.bindValue(":st", lineEdit->text());
query.exec();


После добавления, только что введенное в ТБД значение отображается через QTableView. Вот тут и проблема - текст отображается в виде знаков вопроса.
Идеи есть?  :?:


Название: Кирилица
Отправлено: crocus от Январь 22, 2006, 15:26
Есть отличная идея!!
ВОСПОЛЬЗУЙСЯ ПОИСКОМ ПО ФОРУМУ!!!


Название: Кирилица
Отправлено: bob от Январь 22, 2006, 21:55
Цитата: "crocus"
Есть отличная идея!!
ВОСПОЛЬЗУЙСЯ ПОИСКОМ ПО ФОРУМУ!!!

Во, блин, а то я сам не догадался.
Уже. И не раз. Без толку, что только не пробовал.


Название: Кирилица
Отправлено: beginner от Январь 23, 2006, 03:17
Я конечно в Qt можно сказать новичек, но попробую предположить: Виджиты хранят текст в юникоде, соответственно в этом виде он наверное записывается в БД. Попробуй привести его к локали перед  записью. (например, QString::FromLocal8Bit(...))

PS Научи, что нужно, что бы работать с MySQL или Firebird(особенно) используя Qt. Можно в личку, буду рад помощи.


Название: Кирилица
Отправлено: crocus от Январь 23, 2006, 03:44
Можно думать сколь угодно долго.
Смотря что ищешь, если просто рабочее решение
ВОСПОЛЬЗУЙСЯ ПОИСКОМ ПО ФОРУМУ!!!
Поиск по слову "кодировка" на первой позиции:
http://prog.org.ru/forum/topic_2003_15.html


Название: Кирилица
Отправлено: bob от Январь 23, 2006, 11:32
Отличные новости в архиве PHP 5.0.5 (zip под Винду) есть библиотека
libmysql.dll и с ней проблемы русских символов отсутствуют.
Кажется там добавили mysql_set_charset или что-то типа этого (из changelog PHP), если я правильно понял.

crocus не в обиду, но это ты пишешь в ветке которую я сам начинал в свое время. Я сразу же воспользовался твоим советом, но ни чего не изменилось. :(  Поэтому-то я и поднял эту тему повторно. Надеялся на то, что за прошедшее время хоть что ни будь изменилось.


Название: Кирилица
Отправлено: crocus от Январь 23, 2006, 12:20
Если так извини,
У меня MS Server 2003, версию MySql уже поменял на 5.0.18
нормально работает, причем как бросил libmysql.dll из PHP 5.0.5 в system32 так проблемы и исчезли, да библиотеку libmysql.a ( c ее помощью плагин собирается) собирал сам, может еще и в ней дело.==============================================================
Building the MySQL driver for Qt4/MinGW
==============================================================

Versions used: Qt4.0.0 / MinGW 3.4.2 / MySQL 4.1

1) Creating the MySQL client library.
- - - - - - - - - - - - - - - - - - -

Unfortunatly, the client libraries (libmysql.ddl and libmysql.lib)
shipped with MySQL are compiled with the M$ compiler and are causing
problems with try to link them with the MinGW compiler. Therefore,
we first need to create a MinGW compatible library out of libmysql.dll.
This can be done by taking the following steps:

# cd c:\mysql\lib\opt (c:\mysql is where our MySQL is installed)
# reimp -d libmysql.lib (reimp comes with MinGW utilities)
# dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib
libmysql.a

Now we have the MinGW compatible library called libmysql.a

И когда Qt собирал  libmysql.a положил в /lib а затем подправил pro-файл:

win32:!contains(LIBS, .*mysql.*):!contains(LIBS, .*mysqld.*) {
    LIBS     *= -lmysql    
}


Название: Кирилица
Отправлено: BaltikS от Январь 23, 2006, 13:24
Цитата: "bob"
Цитата: "crocus"
Есть отличная идея!!
ВОСПОЛЬЗУЙСЯ ПОИСКОМ ПО ФОРУМУ!!!

Во, блин, а то я сам не догадался.
Уже. И не раз. Без толку, что только не пробовал.

Я делаю так в maine...
qApp->setDefaultCodec(QTextCodec::codecForLocale());
И записывает в базу данных на русском и читает с неё...и ни каких fromLocal8Bit не нужно ! :D


Название: Кирилица
Отправлено: bob от Январь 29, 2006, 13:11
А ларчик просто открывался. Ошибка выделена красным цветом.
Вот то, что я выполнял:query.exec("SET NAMES utf8");[/i] и все кирилические символы отображались как знак вопроса.

Вот то, что нужно было выполнить:query.exec("SET NAMES utf8;");[/i]
Все, проблема ушла после того как был передан символ точка с запятой после инструкции "SET NAMES utf8".