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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: MySQL, QT3, кириллица. Перепробовал все  (Прочитано 5669 раз)
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« : Октябрь 20, 2008, 09:11 »

Исходные данные: Linux (Ubuntu 7.10), локаль utf8, KDE 3, MySQL 5.0.45, Qt 3.3.7
Создал локальную базу, в ней таблица с текстовым полем. В shell или в Query Brouser кириллица работает нормально: можно записать, можно просмотреть. Имеется программа в Qt с QDataTable, в которую выводится таблица. Вместо кириллицы-что-то типа "билет". Пытаюсь сделать запись из QLineEdit-в таблицу записываются вопросики. Пересмотрел все, что мог в инете.
пробовал:
1) менять my.cnt
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
[mysql]
default-character-set = utf8
в текст программы после подключения к базе пробовал написать запрос
QSqlQuery query1;
2)query1.exec("set character set utf8;");
или
3)query1.exec("SET NAMES utf8;");
толку никакого-только в 3 случае содержимое QLineEdit-поля после команды UPDATE отображается в таблице кракозяблами, а во 2-м случае-вопросиками. Запрос
SHOW VARIABLES LIKE '%char%';
выдает
'character_set_client', 'utf8'
'character_set_connection', 'utf8'
'character_set_database', 'latin1'
'character_set_filesystem', 'binary'
'character_set_results', 'utf8'
'character_set_server', 'latin1'
'character_set_system', 'utf8'
'character_sets_dir', '/usr/share/mysql/charsets/'
а между прочим, в , //usr/share/mysql/charsets/ нет utf8.
4)Пробовал и у таблицы, и у текстового поля менять character set-без толку, в запрос вставлять не содержимое Edit-поля, а tr(Edit->text()) - то же самое
5)если пишу не из Edit-поля, а пишу типа
"UPDATE pinigai SET nam='"+QString::fromLocal8Bit("булка")+"' WHERE id=7;"
опять вопросики.
6)если сначала выполняю запрос таким образом
query1.exec(query_str.utf8())
то по крайней мере в Query Brouser кириллица отображается правильно. А в Qt-программе все равно ее нет.
7)И еще что заметил: если после запуска программы пытаюсь редактировать имеющуюся запись и первую запись делаю латинницей, запись проходит удачно и все следующие тоже (только не по-русски). А если первую редакцию пытаюсь сделать кириллицей-не пишет, пока хоть что-нибудь не впишу латинницей. Это действует, только если изменен my.cnf (см. п. 1)
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
crossly
Гость
« Ответ #1 : Октябрь 20, 2008, 11:28 »

QTextCodec.... Непонимающий
Записан
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« Ответ #2 : Октябрь 20, 2008, 13:33 »

УРА!!
Я, похоже, перемудрил. Изменил по совету crossly свой main.cpp (приведу полный текст-вдруг кому пригодится?)
#include <qapplication.h>
#include <qtextcodec.h>
#include "baseform.h"

int main( int argc, char ** argv )
{
    QApplication a( argc, argv );
    QTextCodec *codec;
    codec=QTextCodec::codecForName("utf8");
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForTr(codec);
    baseForm w;
    w.show();
    a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
    return a.exec();
}
И все! Не нужно править my.cnf, не нужны дополнительные запросы-все сразу заработало, как хотелось.
Тема закрыта.
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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