Название: [FreeTDS][Qt4] Русские буковки для MS SQL Server'а Отправлено: Ay49Mihas от Июнь 09, 2010, 09:34 Здравствуйте!
По не зависящим от меня причинам приходится кодить для работы с MS SQL Server'ом 2005. Ограничения FreeTDS известны (нет результатов из хранимых процедур и тэдэ), с ограничениями Qt4 повеселее --- узнаю только после наступления на грабли. Вот ещё не сталкивался с проблемой. Операция INSERT, в bindValue передаю строку QString с русскими символами (без них всё работает как и надо). При выполнении запроса выдаётся следующая ошибка: Код: [FreeTDS][SQL Server]The incoming tabular data stream (TDS) protocol stream is incorrect. The stream ended unexpectedly. [FreeTDS][SQL Server]Error converting characters into server's character set. Some character(s) could not be converted. Код: [FreeTDS][SQL Server]Operand type clash: image is incompatible with varchar. Как с этим делом бороться? Локаль UTF-8. В freetds.conf client charset = UTF-8. В программе на Qt4 запускается QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); Куда ещё можно копать? Заранее благодарен! PS: система OpenSuSE 11.2, Qt 4.5.2 с драйвером obdc, скомпилированным с ODBC 2 (по рекомендации Trolltech из-за проблем в FreeTDS с UTF-8). unixODBC 2.2.12, freetds 0.82 Название: Re: [FreeTDS][Qt4] Русские буковки для MS SQL Server'а Отправлено: Ay49Mihas от Июнь 09, 2010, 13:36 Итак, у меня непонятки с преобразованием кодировок в Qt4 при передаче их unixODBC. Сделал полностью текстовый запрос с русской строкой в UTF-8, добавляет в базу кракозябры. На cp1251 --- то же самое, только кракозябры другие.
В общем, между засовыванием в запрос путём bindValue значения на русском языке и передачей этого запроса на выполнение unixODBC (я правильно понимаю, что bindValue() не обращается к unixODBC, а сама биндит значения в запрос?), выполняется какое-то неправильное перекодирование, которое мне портит всю малину... |