Russian Qt Forum
Ноябрь 23, 2024, 04:30
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Базы данных
>
SET CLIENT_ENCODING TO 'UNICODE'
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: SET CLIENT_ENCODING TO 'UNICODE' (Прочитано 8144 раз)
OlMi
Гость
SET CLIENT_ENCODING TO 'UNICODE'
«
:
Август 23, 2005, 11:39 »
При коннекте к Постгресу выдается сабж.
Как это убрать или чтоб было кои8-р?
С текстовыми строками все понятно, а вот
настроить драйвер БД или коннект не могу найти где -
может кто подскажет, чтоб исходный код не перетрахивать?
Qt-3.3.4, FreeBSD 4.11, PostgreSQL 7.4.8
Записан
Admin
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1988
SET CLIENT_ENCODING TO 'UNICODE'
«
Ответ #1 :
Август 23, 2005, 12:47 »
во первых надо определить кто хочет общатся в unicode
posgress или qt
похожая тема тут уже была но про mysql
я не знаток posgress но возможно там таже схема
Записан
OlMi
Гость
SET CLIENT_ENCODING TO 'UNICODE'
«
Ответ #2 :
Август 23, 2005, 12:59 »
Думаю, что драйвер. Он сначала запрашивает версию, как и положено, а потом идет эта команда:
2005-08-22 17:31:17 LOG: команда: select version()
2005-08-22 17:31:17 LOG: длительность: 76.911 мс
2005-08-22 17:31:17 LOG: команда: SET CLIENT_ENCODING TO 'UNICODE'
2005-08-22 17:31:17 LOG: длительность: 11.364 мс
2005-08-22 17:31:17 LOG: команда: SET DATESTYLE TO 'ISO'
2005-08-22 17:31:17 LOG: длительность: 0.499 мс
а дальше пошли мои SQL запросы
Какие будут предложения?
Записан
Admin
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1988
SET CLIENT_ENCODING TO 'UNICODE'
«
Ответ #3 :
Август 23, 2005, 15:17 »
Варианты:
1. Копать драйвер, что бы koi8-r к примеру выставлял
2. Unicode - это случаем не utf8? Тогда можно было бы самому кодировку делать! Конечно затраты на перекодировку!
Записан
OlMi
Гость
SET CLIENT_ENCODING TO 'UNICODE'
«
Ответ #4 :
Август 24, 2005, 04:16 »
См. внимательно вопрос. Я, конечно и сам могу это место в исходниках найти.
Но, полагал, что спросить у знающих людей быстрее, при условии, конечно, что они есть.
Должен быть, в принципе, красивый вариант, типа "драйвер_или_плагин::МЕТОД_ВЫСТАВЛЕНИЯ_КОДИРОВКИ_ПРИ_КОННЕКТЕ(кодировка)".
Или это где-нить при наследовании можно дополнительно дообъявить (перенести из приватки в паблик). Мысль такая - это скорее всего делает экземпляр объекта плагина драйвера или базы при коннекте.
UNICODE имеется в качестве фичи в перечислении абстрактного драйвера.
А мне нужно, чтобы практически эту енкодировку менять при коннекте. Кое-что я уже нашел в исходниках, но пока только строки кода, а мне нужно НАЗВАНИЕ_МЕТОДА.
Записан
OlMi
Гость
SET CLIENT_ENCODING TO 'UNICODE'
«
Ответ #5 :
Август 24, 2005, 04:35 »
Уже нашел (см. ниже). Проблема теперь в том, что теперь точно известно, что рабочего метода, меняющего кодировку при коннекте не существует. Придется метод open переобъявлять или приспосабливаться как-то.
По дурному, конечно, сделано - жестко зашитая кодировка. И это-то в Си++!
bool QPSQLDriver::open( const QString & db,
const QString & user,
const QString & password,
const QString & host,
int port,
const QString& connOpts )
{
.... skipped
pro = getPSQLVersion( d->connection );
d->isUtf8 = setEncodingUtf8( d->connection );
setDatestyle( d->connection );
setOpen( TRUE );
setOpenError( FALSE );
return TRUE;
}
Записан
OlMi
Гость
SET CLIENT_ENCODING TO 'UNICODE'
«
Ответ #6 :
Август 26, 2005, 05:52 »
Маленькое дополнение.
Поскольку, как выяснилось, все в Qt сделано по стандарту UNICODE, ничего в драйверах менять не надо при коннекте. Наоборот, необходимо следить за тем, чтобы отдавая текст на русском языке, СУБД правильно осуществляла перекодировку из своей локальной в UNICODE. Иначе точно придется дописывать перекодировщик.
Пока все.
Записан
Rainbow
Гость
SET CLIENT_ENCODING TO 'UNICODE'
«
Ответ #7 :
Август 26, 2005, 12:28 »
Немогу понять зачем вся эта траханина? Не проще ли БД сразу сделать с поддержкой юникода?
Лично я всегда так делаю.
Записан
OlMi
Гость
SET CLIENT_ENCODING TO 'UNICODE'
«
Ответ #8 :
Август 27, 2005, 10:13 »
В СУБД POSTGRES поддержка UNICODE и так имеется.
Для работы с данными, хранящимися в СУБД, других клиентов, в том числе консольных, из разных ОС с разной локальной кодировкой необходимо осуществлять перекодировку "на лету". Как выяснилось, данная перекодировка выполняется корректно только при правильно указанной ENCODING для БД при ее создании (не путать с инициализацией СУБД). Что, в общем-то, закономерно, но было упущено первоначально из виду.
Что касается Вас, то, видимо, у Вас нет того клиентского многообразия кодировок, т.е. она у Вас всего одна, поэтому и проблемы, собственно такой у Вас нет.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...