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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Кириллица и QSqlTableModel  (Прочитано 4260 раз)
braboar
Гость
« : Декабрь 09, 2010, 17:20 »

Всем доброго времени суток!
Есть база MySQL 4.0.18-nt, character set: latin1, Qt4.6.3Б у клиентов - WinXP
Базу изменять не могу.
В базе есть русские символы, однако после
Код:
_view = new QTableView(this);
_db = QSqlDatabase::addDatabase("QMYSQL");
_db.setHostName(QString("192.168.1.1"));
_db.setPort(3306);
_db.setUserName("user");
_db.setPassword("pswd");
_db.setDatabaseName(QString("accounting"));
if (_db.open())
{
    qDebug("DB open success");
    _model = new QSqlTableModel(this);
    _model->setTable(QString("hb_0_0_2"));
    _model->select();
    _model->setEditStrategy(QSqlTableModel::OnFieldChange);
    _view->setModel(_model);
}
имеем
Код:
Âåíèê ÂÐ-1
вместо номального слова.
Просмотрел уже весь форум, кодеки устанавливал,
Код:
QTextCodec *codec;
codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForTr(codec);
- не помогло.
Если просто QSqlQuery, то потом всякими способами могу отобразить русские буквы, но хочется Model/View
Что можно сделать?
Записан
set
Гость
« Ответ #1 : Декабрь 10, 2010, 09:50 »

>>Есть база MySQL 4.0.18-nt, character set: latin1

>>codec = QTextCodec::codecForName("UTF-8");


ничего не кажется странным?
настраивайте MySQL: по умолчанию везде кодировку UTF и клиенту и серверу...
делайте базу в UTF и будет куда меньше косяков
Записан
BRE
Гость
« Ответ #2 : Декабрь 10, 2010, 10:11 »

2 braboar
Попробуй настроить кодировки сам:
Код
C++ (Qt)
QSqlQuery q( "SET NAMES 'utf8'" );
QSqlQuery q( "SET CHARACTER SET 'utf8'" );
 
Записан
set
Гость
« Ответ #3 : Декабрь 10, 2010, 10:52 »

2 braboar
Попробуй настроить кодировки сам:
Код
C++ (Qt)
QSqlQuery q( "SET NAMES 'utf8'" );
QSqlQuery q( "SET CHARACTER SET 'utf8'" );
 


я конечно извиняюсь но лично у меня так ниче не вышло... в базу заносит всякую чушь
Записан
braboar
Гость
« Ответ #4 : Декабрь 10, 2010, 11:28 »

2 BRE
Код
C++ (Qt)
bool b = query.exec("SET NAMES 'utf8'");
 
возвращает 0 - т.е. не помогает
И вообще, посмотрел я системные переменные сервера - нет там utf8 - только
Код:
latin1 big5 czech euc_kr gb2312 gbk latin1_de sjis tis620 ujis dec8 dos
german1 hp8 koi8_ru latin2 swe7 usa7 cp1251 danish hebrew win1251 estonia
hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5

2 set
Цитировать
настраивайте MySQL: по умолчанию везде кодировку UTF и клиенту и серверу...
- это означает:
Код:
CREATE DATABASE bla-bla CHARACTER SET utf-8
так?
Менять сервер мне не позволят Грустный
Записан
set
Гость
« Ответ #5 : Декабрь 10, 2010, 12:08 »

Цитировать
Цитировать
настраивайте MySQL: по умолчанию везде кодировку UTF и клиенту и серверу...
- это означает:
Код:
CREATE DATABASE bla-bla CHARACTER SET utf-8
так?
Менять сервер мне не позволят Грустный
mysql> SHOW CHARACTER SET; показывает доступные кодировки
я еще не встречал чтобы небыло utf
в вашем случае ниче другого не остается, можете попробовать
CREATE DATABASE newdb_name CHARACTER SET utf8 COLLATE utf8_general_ci;

но я бы посоветовал в my.ini добавить это
Код:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
default-character-set = utf8
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english
skip-external-locking
default-character-set = utf8
character_set_server = utf8
collation_server = utf8_general_ci
skip-character-set-client-handshake

если mysql собирался из исходников, лучше пересобрать MySQL с этой кодировкой по умолчанию

в любом случае
mysql> show variables like 'char%';
должна показывать utf8 везде иначе тебе удачи не видать.
« Последнее редактирование: Декабрь 10, 2010, 12:10 от set » Записан
braboar
Гость
« Ответ #6 : Декабрь 10, 2010, 12:33 »

set, спасибо за советы, вот только
Цитировать
CREATE DATABASE newdb_name CHARACTER SET utf8 COLLATE utf8_general_ci;
дает
Код:
#1064 - You have an error in your SQL syntax.  Check the manual that
corresponds to your MySQL server version for the right syntax to use near
'CHARACTER SET utf8 COLLATE utf8_general_ci' at line 1

И вообще:
Цитировать
As of MySQL 4.1.1, create_specification options may be given. The CHARACTER SET clause
specifies the database character set. The COLLATE clause specifies the database collation.
У меня, напомню, 4.0.18 - не проходит Грустный
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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