Название: SET CLIENT_ENCODING TO 'UNICODE' Отправлено: OlMi от Август 23, 2005, 11:39 При коннекте к Постгресу выдается сабж.
Как это убрать или чтоб было кои8-р? С текстовыми строками все понятно, а вот настроить драйвер БД или коннект не могу найти где - может кто подскажет, чтоб исходный код не перетрахивать? Qt-3.3.4, FreeBSD 4.11, PostgreSQL 7.4.8 Название: SET CLIENT_ENCODING TO 'UNICODE' Отправлено: Admin от Август 23, 2005, 12:47 во первых надо определить кто хочет общатся в unicode
posgress или qt похожая тема тут уже была но про mysql я не знаток posgress но возможно там таже схема Название: SET CLIENT_ENCODING TO 'UNICODE' Отправлено: OlMi от Август 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 запросы Какие будут предложения? Название: SET CLIENT_ENCODING TO 'UNICODE' Отправлено: Admin от Август 23, 2005, 15:17 Варианты:
1. Копать драйвер, что бы koi8-r к примеру выставлял 2. Unicode - это случаем не utf8? Тогда можно было бы самому кодировку делать! Конечно затраты на перекодировку! Название: SET CLIENT_ENCODING TO 'UNICODE' Отправлено: OlMi от Август 24, 2005, 04:16 См. внимательно вопрос. Я, конечно и сам могу это место в исходниках найти.
Но, полагал, что спросить у знающих людей быстрее, при условии, конечно, что они есть. Должен быть, в принципе, красивый вариант, типа "драйвер_или_плагин::МЕТОД_ВЫСТАВЛЕНИЯ_КОДИРОВКИ_ПРИ_КОННЕКТЕ(кодировка)". Или это где-нить при наследовании можно дополнительно дообъявить (перенести из приватки в паблик). Мысль такая - это скорее всего делает экземпляр объекта плагина драйвера или базы при коннекте. UNICODE имеется в качестве фичи в перечислении абстрактного драйвера. А мне нужно, чтобы практически эту енкодировку менять при коннекте. Кое-что я уже нашел в исходниках, но пока только строки кода, а мне нужно НАЗВАНИЕ_МЕТОДА. Название: SET CLIENT_ENCODING TO 'UNICODE' Отправлено: OlMi от Август 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; } Название: SET CLIENT_ENCODING TO 'UNICODE' Отправлено: OlMi от Август 26, 2005, 05:52 Маленькое дополнение.
Поскольку, как выяснилось, все в Qt сделано по стандарту UNICODE, ничего в драйверах менять не надо при коннекте. Наоборот, необходимо следить за тем, чтобы отдавая текст на русском языке, СУБД правильно осуществляла перекодировку из своей локальной в UNICODE. Иначе точно придется дописывать перекодировщик. Пока все. Название: SET CLIENT_ENCODING TO 'UNICODE' Отправлено: Rainbow от Август 26, 2005, 12:28 Немогу понять зачем вся эта траханина? Не проще ли БД сразу сделать с поддержкой юникода?
Лично я всегда так делаю. Название: SET CLIENT_ENCODING TO 'UNICODE' Отправлено: OlMi от Август 27, 2005, 10:13 В СУБД POSTGRES поддержка UNICODE и так имеется.
Для работы с данными, хранящимися в СУБД, других клиентов, в том числе консольных, из разных ОС с разной локальной кодировкой необходимо осуществлять перекодировку "на лету". Как выяснилось, данная перекодировка выполняется корректно только при правильно указанной ENCODING для БД при ее создании (не путать с инициализацией СУБД). Что, в общем-то, закономерно, но было упущено первоначально из виду. Что касается Вас, то, видимо, у Вас нет того клиентского многообразия кодировок, т.е. она у Вас всего одна, поэтому и проблемы, собственно такой у Вас нет. |