Название: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: DpoHro от Январь 08, 2008, 19:29 Qt 4.3.2
Mysql БД Выдержка переменных из mysqladmin: Цитировать character set client utf8 latin1 character set connection cp1251 latin1 character set database latin1 latin1 character set results utf8 latin1 character set server latin1 latin1 character set system utf8 utf8 collation connection cp1251_general_ci latin1_swedish_ci collation database latin1_swedish_ci latin1_swedish_ci collation server latin1_swedish_ci latin1_swedish_ci БД в кодировке cp1251 Устанавливаю кодеки: Код: QTextCodec* codec = QTextCodec::codecForName("CP1251"); До сих порпроблем небыло, но производил только чтение из БД. Настала необходимость вставки данных в таблесы и... Русские букафки заменяются на "????" Может стоило БД в utf8 делать? И вообще какие еще проблемы могут быть и посоветуйте как поступить в моей ситуации? Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: Пантер от Январь 08, 2008, 19:43 Делай конверт типа:
libeEdit->text().toLocal8Bit() Или что-то типа этого. А вообще воспользуйся поиском, вопрос не раз поднимался. Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: DpoHro от Январь 08, 2008, 23:31 Первым делом попробовал, но увы тут дело видимо в чемто другом :(
Сейчас пороюсь по форуму... Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: DpoHro от Январь 08, 2008, 23:48 Да я забыл сообщить, что QSqlQuery создаю так:
Код: QSqlQuery q = db.exec("SET NAMES 'cp1251'"); Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: DpoHro от Январь 09, 2008, 00:40 Облазал форум, ничего не нашел чтобы привело меня к решению...
Кстати, замечательный факт, вместе с данными из поля ввода с формы, которые собственно и превращаются в знаки вопроса, еще добавляются данные полученные из другого запроса. В какой кодировке они - ХЗ, точно не в 1251 Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: Пантер от Январь 09, 2008, 12:42 Код: QTextCodec* qtcCodec = QTextCodec::codecForName("CP1251"); А вообще.... может перевести базу на ютф? Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: DpoHro от Январь 09, 2008, 13:15 Не совсем понял пример.
Я до выполнения запроса, все данные сохраняю в свою структуру и потом только формирую запрос: Код: .... В utf не желательно переводить :( Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: DpoHro от Январь 09, 2008, 13:21 А вообще как определить в какой кодировке текст?
И второй вопрос как в эту кодировку перевести текст получаемый от пользователя? Как я уже писал, часть данных полученных другим запросом из БД сохраняется как надо, но я не могу остальные данные перевести в ту же кодировку. Вот например есть населенный пункт "Аинское", в отладчике я его вижу как "Aeineia". Эти иероглифы чудесным образом сохраняются как нужно, то есть в БД я вижу их как "Аинское". Но данные которые вводит пользователь в отладчике просматриваются один к одному, а при сохранении в БД знаки вопроса... Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: Пантер от Январь 09, 2008, 19:29 Ну ты крутишь... Вообще проще делать так:
QSqlQuery* qsqQuery=new QSqlQuery(); qsqQuery->prepare("INSERT INTO am_insured_peoples SET " "transport_id=:transport_id," "firstname=:firstname," "lastname=:lastname," .............................. ) qsqQuery->bindValue(":transport_id",qSessionID); qsqQuery->bindValue(":firstname",qsFN); qsqQuery->bindValue(":lastname",qtcCodec866->fromUnicode(NorE_person.qsLastName)); .................................. qsqQuery->exec(); В общем покрути так... Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: Mikhail от Январь 09, 2008, 21:14 Qt 4.3.2 Mysql БД Выдержка переменных из mysqladmin: Цитировать character set client utf8 latin1 character set connection cp1251 latin1 character set database latin1 latin1 character set results utf8 latin1 character set server latin1 latin1 character set system utf8 utf8 collation connection cp1251_general_ci latin1_swedish_ci collation database latin1_swedish_ci latin1_swedish_ci collation server latin1_swedish_ci latin1_swedish_ci БД в кодировке cp1251 Устанавливаю кодеки: Код: QTextCodec* codec = QTextCodec::codecForName("CP1251"); До сих порпроблем небыло, но производил только чтение из БД. Настала необходимость вставки данных в таблесы и... Русские букафки заменяются на "????" Может стоило БД в utf8 делать? И вообще какие еще проблемы могут быть и посоветуйте как поступить в моей ситуации? Все ну очень запущено. Причем тут переменные mysqladmin? Для работы с MySql установи необходимую кодировку для MySql в файле my.ini: в секции [mysqld] default-character-set=cp1251 И перезапусти сервер MySql. А что такое QSqlQuery q = db.exec("SET NAMES 'cp1251'"); Зачем одинарные кавычки? Правильно будет QSqlQuery q = db.exec("SET NAMES cp1251"); Это надо выполнить после подключения к базе данных и спокойно работать с ней в кодировке cp1251 без дополнительный преобразований в cp1251 из QString. Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: DpoHro от Январь 10, 2008, 00:33 И ничего не запущено... ::)
Причем тут переменные mysqladmin? Для порядку =) Я ж задаю вопрос, и пока не знаю на него ответа, малоли пригодится... Цитировать Для работы с MySql установи необходимую кодировку для MySql в файле my.ini: БД на хостинге, пока что своего сервера нет, как купимс, так будем редактировать настройки...в секции [mysqld] default-character-set=cp1251 И перезапусти сервер MySql. Цитировать А что такое QSqlQuery q = db.exec("SET NAMES 'cp1251'"); Давно уже пользуюсь таким синтаксисом еще с PHP, все работает, и в QT тоже...Зачем одинарные кавычки? Правильно будет QSqlQuery q = db.exec("SET NAMES cp1251"); Я ж не сам придумал: http://dev.mysql.com/doc/refman/4.1/en/charset-connection.html Вообще не думаю что есть разница ... Цитировать Это надо выполнить после подключения к базе данных и спокойно работать с ней в кодировке cp1251 без дополнительный преобразований в cp1251 из QString. Вооот, а SET CHARACTER SET cp1251 не помогает =( даже когда работаю с БД на дефолтных настройках на локалхосте. Из БД данные получаются и нормально отображаются в программе... Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: Mikhail от Январь 10, 2008, 09:06 И ничего не запущено... ::) Причем тут переменные mysqladmin? Для порядку =) Я ж задаю вопрос, и пока не знаю на него ответа, малоли пригодится... Цитировать Для работы с MySql установи необходимую кодировку для MySql в файле my.ini: БД на хостинге, пока что своего сервера нет, как купимс, так будем редактировать настройки...в секции [mysqld] default-character-set=cp1251 И перезапусти сервер MySql. Цитировать А что такое QSqlQuery q = db.exec("SET NAMES 'cp1251'"); Давно уже пользуюсь таким синтаксисом еще с PHP, все работает, и в QT тоже...Зачем одинарные кавычки? Правильно будет QSqlQuery q = db.exec("SET NAMES cp1251"); Я ж не сам придумал: http://dev.mysql.com/doc/refman/4.1/en/charset-connection.html Вообще не думаю что есть разница ... Цитировать Это надо выполнить после подключения к базе данных и спокойно работать с ней в кодировке cp1251 без дополнительный преобразований в cp1251 из QString. Вооот, а SET CHARACTER SET cp1251 не помогает =( даже когда работаю с БД на дефолтных настройках на локалхосте. Из БД данные получаются и нормально отображаются в программе... Ну если не можешь редактировать настройки БД, то хотя бы узнай какие установлены и в соответствии с этим "Set names .... " А для начала поработай с БД на localhost из $(QTDIR)/demos/sqlbrowser Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: DpoHro от Январь 10, 2008, 17:23 Совету твоему внял я...
Но ничего из этого не вышло, сплошные знаки вопросов. Перебрал все возможные кодировки :( Какаято ерунда. Скажите как у кого все работает и на чтение и на запись БД. Если можно с примерами, если не трудно поменять код в $(QTDIR)/demos/sqlbrowser и скриптом БД на дефолтных настройках mysql... Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: Mikhail от Январь 10, 2008, 19:12 Совету твоему внял я... Но ничего из этого не вышло, сплошные знаки вопросов. Перебрал все возможные кодировки :( Какаято ерунда. Скажите как у кого все работает и на чтение и на запись БД. Если можно с примерами, если не трудно поменять код в $(QTDIR)/demos/sqlbrowser и скриптом БД на дефолтных настройках mysql... Еще аз повторяю: 1. Поставь на своей машине MySql ( у меня стоит MySql 5.0 ) 2. Установи необходимую кодировку для MySql в файле my.ini( файл этот в каталоге установки MySql ): в секции [mysqld] default-character-set=cp1251 И перезапусти сервер MySql. 3. Запусти пример из $(QTDIR)/demos/sqlbrowser. 4. Создай соединение с базой данных mysql. 5. создай новую базу. Например с именем Proba. 6. Создай соединение с базой данных Proba. 7. Выполни запрос SET NAMES cp1251; 8. создай таблицу и внеси в нее несколько записей. Если у тебя при просмотре записей кракозябры вместо русских букв, то это значит несовпадение кодировок по п.п. 2 и 7. Если у тебя при просмотре записей ???? вместо русских букв, то это значит что по п.2 прописано default-character-set= latin1 Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: DpoHro от Январь 10, 2008, 21:13 У меня знаки вопроса после добавления, параметр default-character-set=latin1 действительно установлен в latin1
Но он похоже и на сервере (на хостинге) также установлен в latin1 Вопрос, как решить проблему? Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: DpoHro от Январь 10, 2008, 21:36 Сменил на локалхосте latin1 на cp1251 в программе запрос SET NAMES cp1251 всегда был и до сих пор есть .
БД cp1251 я не знаю что еще нужно... Я в шоке, 3 день и ничего не ясно ((( Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: Mikhail от Январь 10, 2008, 22:10 Сменил на локалхосте latin1 на cp1251 в программе запрос SET NAMES cp1251 всегда был и до сих пор есть . БД cp1251 я не знаю что еще нужно... Я в шоке, 3 день и ничего не ясно ((( Ну а теперь выполни пункты 3 - 8 но конечно создай новую базу, не Proba и проверь. должно все работать. Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: DpoHro от Январь 10, 2008, 22:40 Все сделал (создал новую БД добавил запись), и все по-прежнему...
Я вот только одного не пойму, ведь с этой же БД я работаю из PHP и все в норме... Название: Re: Qt4.3.2+mysql - проблемы с кодировкой, =( Отправлено: DpoHro от Январь 11, 2008, 01:37 Ну слава Богу! Я рад что это оказалось возможным!
Настройки my.ini менять не пришлось, БД cp1251, соединение cp1251. В моем случае помогло следующее: Код: QString newstring=inputstring.fromLatin1(test1251.toAscii()); Вобщем каждый из учавствовавших в диалоге были в чем то правы =) Спасибо, друзья! :) |