Russian Qt Forum
Ноябрь 23, 2024, 04:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Кирилица  (Прочитано 6662 раз)
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
Гость
« Ответ #1 : Январь 22, 2006, 15:26 »

Есть отличная идея!!
ВОСПОЛЬЗУЙСЯ ПОИСКОМ ПО ФОРУМУ!!!
Записан
bob
Гость
« Ответ #2 : Январь 22, 2006, 21:55 »

Цитата: "crocus"
Есть отличная идея!!
ВОСПОЛЬЗУЙСЯ ПОИСКОМ ПО ФОРУМУ!!!

Во, блин, а то я сам не догадался.
Уже. И не раз. Без толку, что только не пробовал.
Записан
beginner
Гость
« Ответ #3 : Январь 23, 2006, 03:17 »

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

PS Научи, что нужно, что бы работать с MySQL или Firebird(особенно) используя Qt. Можно в личку, буду рад помощи.
Записан
crocus
Гость
« Ответ #4 : Январь 23, 2006, 03:44 »

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

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

crocus не в обиду, но это ты пишешь в ветке которую я сам начинал в свое время. Я сразу же воспользовался твоим советом, но ни чего не изменилось. Грустный  Поэтому-то я и поднял эту тему повторно. Надеялся на то, что за прошедшее время хоть что ни будь изменилось.
Записан
crocus
Гость
« Ответ #6 : Январь 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
Гость
« Ответ #7 : Январь 23, 2006, 13:24 »

Цитата: "bob"
Цитата: "crocus"
Есть отличная идея!!
ВОСПОЛЬЗУЙСЯ ПОИСКОМ ПО ФОРУМУ!!!

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

Я делаю так в maine...
qApp->setDefaultCodec(QTextCodec::codecForLocale());
И записывает в базу данных на русском и читает с неё...и ни каких fromLocal8Bit не нужно ! Веселый
Записан
bob
Гость
« Ответ #8 : Январь 29, 2006, 13:11 »

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

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


Страница сгенерирована за 0.122 секунд. Запросов: 20.