crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> MySql и кодировка
kalombo
  опции профиля:
сообщение 10.12.2008, 18:12
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 5.8.2008
Пользователь №: 252

Спасибо сказали: 0 раз(а)




Репутация:   0  


В функции main есть строчка QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251"));
Есть две формы для ввода данных в БД, одна сделана с помощью QtDesigner (ui-файл соответственно), другая непосредственно - кодом. Первая позволяет выполнить SQL-запрос, то есть данные на русском языке попадают в Бд, вторая - ругается, lastError() выдает что-то вроде "Не могу вставить строку вида "\xd1\xd2\xe3... и т.д." Как это исправить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 10.12.2008, 18:47
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(kalombo @ 10.12.2008, 18:12) *
в Бд, вторая - ругается, lastError() выдает что-то вроде "Не могу вставить строку вида "\xd1\xd2\xe3... и т.д."



можно предположить что обратные слэши надо дублировать..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.12.2008, 19:19
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kalombo @ 10.12.2008, 21:12) *
\xd1\xd2\xe3
именно такая строка в водится?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 11.12.2008, 9:53
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(kalombo @ 10.12.2008, 18:12) *
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251"));

Объясните мне какой смысл задавать жестко виндовую кодировку в кроссплатформенном приложении ? Не лучше ли использовать QString::fromLocal8Bit(), который в зависимости от текущей локали будет выбирать сам кодек ?

С базами данных, насколько я помню, тоже не все однозначно. Обычно на сервере можно настроить не только кодировку для таблицы, но и кодировку принимаемой и возвращаемой строки. Т.е. приниматься строки могут в кодировке локали (например cp1251 в винде и koi8-r в линуксе), БД сама их перекодирует в UTF8 и заносит в таблицу, при SELECT'e возвращает UTF8 данные из таблицы опять же в зависимости от локали.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.12.2008, 15:20
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(SABROG @ 11.12.2008, 12:53) *
Объясните мне какой смысл задавать жестко виндовую кодировку в кроссплатформенном приложении ?
ни какого. Это просто часто употребляемый быстрый совет, для виндовозного варианта.

Цитата(SABROG @ 11.12.2008, 12:53) *
Не лучше ли использовать QString::fromLocal8Bit()
где и сколько раз?

Лучше на мой взгляд так:
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale () );
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kalombo
  опции профиля:
сообщение 11.12.2008, 17:31
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 5.8.2008
Пользователь №: 252

Спасибо сказали: 0 раз(а)




Репутация:   0  


Значит так...
Цитата
именно такая строка в водится?

Вводится - "ааа"
Получаю - "Incorrect string value: \xD0\xB0\xD0\xB0\xD0\xB0\... ' for column Name_Obj и т.д."

Цитата
Объясните мне какой смысл задавать жестко виндовую кодировку в кроссплатформенном приложении ? Не лучше ли использовать QString::fromLocal8Bit(), который в зависимости от текущей локали будет выбирать сам кодек ?

Никакого. Лучше использовать кодировку в зависимости от локали. Теперь так делаю.

Цитата
С базами данных, насколько я помню, тоже не все однозначно. Обычно на сервере можно настроить не только кодировку для таблицы, но и кодировку принимаемой и возвращаемой строки. Т.е. приниматься строки могут в кодировке локали (например cp1251 в винде и koi8-r в линуксе), БД сама их перекодирует в UTF8 и заносит в таблицу, при SELECT'e возвращает UTF8 данные из таблицы опять же в зависимости от локали.

У меня две формы для забивки в данных, в разные таблицы правда, но не суть важно. Ставлю обеим таблицам cp1251. Ui-форма позволяет вводить данные, не Ui - выдает ошибку. Ставлю кодировку utf8 - результат не меняется. Или я всё-таки зря прицепился к Ui-формам и не в них дело?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 11.12.2008, 17:48
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Проведи простой тест. Попытайся вставить английский текст. Если прокатит, значит дело в кодировке, если нет, то в коде.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kalombo
  опции профиля:
сообщение 11.12.2008, 18:02
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 5.8.2008
Пользователь №: 252

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вставляется. Его я первым делом провел.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 11.12.2008, 18:13
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


QString::fromLocal8Bit() пробывал ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kalombo
  опции профиля:
сообщение 11.12.2008, 18:34
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 5.8.2008
Пользователь №: 252

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(SABROG @ 11.12.2008, 19:13) *
QString::fromLocal8Bit() пробывал ?

Не помогло. Упростим задачу. Создал новое приложение, в конструкторе формулы тупо написал
QString str = QString("INSERT into object (Name_obj, Link_obj,Limits, Formuls, Graph, topicsid) values('Мама','Папа','','','',9)");
insert.exec(str);
Результат тот же в main стоит QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); Кодировку для таблицы object менял с помощью Mysql Administrator на utf8, cp1251.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.4.2024, 17:36