Russian Qt Forum
Май 04, 2024, 16:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Help кодировка в MySQL  (Прочитано 9414 раз)
Slavan
Гость
« : Август 10, 2005, 11:51 »

Немогу понять.
(MSVC++2003,QT3.3.3,MySQL4.1.13 на удалённой тачке FreeBSD5.4)

Почитал архив форума
нашёл что "?Непонимающий"
лечится

QTextCodec *codec=QTextCodec::codecForName("utf8");
QTextCodec::setCodecForCStrings(codec);

но самое интересное что у меня  не выходит Грустный . Мож я что-то не так делаю......
получаю в  строку QCString и отправляю в базу. там у меня Непонимающий?
читаю с базы тоже самое Даже то что правильно внеслось с консоли.
С консоли всё ок.....

Пересмотрел my.cnf там стоит сp1251
на utf8  и utf8 тот же результат......


второй день голову ломаю Грустный помогите плз.....

Заранее благодарен.
Записан
jindos
Гость
« Ответ #1 : Август 10, 2005, 12:22 »

Попробуй для строки сделать такую вот штуку:

      QString str = ; //твоя строка
      QTextCodec *t;
      t = QTextCodec::codecForName("CP-1251",0);      
      if (t)      
        QString s = QString(t->toUnicode(str));
       
      s - новая преобразованная...

      З.Ы. Да еще: не для всех шрифтов русский поддерживается, так что попробуй вот с этим шрифтом - QFont formFont("smallsmooth", 11);
Записан
Slavan
Гость
« Ответ #2 : Август 10, 2005, 12:43 »

Делаю


   QString s;
   
         QTextCodec *codec=QTextCodec::codecForName("CP-1251",0);
   QTextCodec::setCodecForCStrings(codec);
// установил кодек
    s=lineEdit1->text();
   QString ss=QString(codec->toUnicode(s));


   db->exec("insert into tablica_my(name) values('"+ss+"');");
добавляет '?Непонимающий??'

Но есть продвижение букву 'ч' стало нормально постить
Записан
jindos
Гость
« Ответ #3 : Август 10, 2005, 13:06 »

Пробовал шрифт для lineEdit1 на ("smallsmooth", 11) устанавливать?

Может тебе еще такая штука поможет: ss = QString::fromLocal8Bit(s)...

И напиши, какие были изменения при применении этих способов...
Записан
Slavan
Гость
:(
« Ответ #4 : Август 10, 2005, 13:29 »

Не не помогло.
Может базу я настроил не правильно. Какие параметры чарсетов для базы дожны быть?Непонимающий везде utf8?НепонимающийНепонимающий
Может я действительно где-то обшибся....
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #5 : Август 10, 2005, 13:29 »

возможно причина не в QT


насколько я помню
у MYSQL 4.1 появилась такая фича
клиент сообщает пользователю какой кодировкой он будет общатся с ним

читай тут

http://phpclub.ru/talk/showthread.php?s=&threadid=58477&rand=92

вот вырезка

Цитировать

Если у вас MySQL 4.1 и любые проблемы с русскими буквами, то попробуйте в начале вашего скрипта, но после соединения выполнить SQL-запрос
 
--------------------------------------------------------------------------------
 
SET NAMES кодировка;

--------------------------------------------------------------------------------
 

Где кодировка, та кодировка, в которой у вас данные (или в которой вы хотите их видеть). Например для русской виндовой кодировки (windows-1251) это будет utf8, для KOI8-R - koi8r, для UTF-8 - utf8 и так далее.


АЛЬТЕРНАТИВНЫЙ ВАРИАНТ
# The MySQL server
[mysqld]
init-connect="SET NAMES utf8"


Если это вам поможет, то разобраться, что же происходит поможет http://dev.mysql.com/doc/mysql/en/C...connection.html, а более подробно о том, что из себя представляет поддержка кодировок в MySQL 4.1 поможет узнать http://dev.mysql.com/doc/mysql/en/Charset.html

ВАЖНОЕ ЗАМЕЧАНИЕ!
функция mysqli_client_encoding() и сотоварищи, отображает
кодировку клиента на момент соединения и не меняет возвращаемое
значение в процессе работы. Поэтому не стоит кричать, что кодировка не
меняется. Просто используйте SET NAMES кодировка и смотрите
результат работы скрипта.

Если у вас получается каша вместо русских букв (что является
следствием того, что база думает, что данные у нее хранятся не в той
кодировке, например, latin1), то опять же обратитесь к мануалу, а
конкретно разделу про конвертирование кодировок при переходе на 4.1

Записан
Slavan
Гость
« Ответ #6 : Август 10, 2005, 14:18 »

Огромное преогромное спасибо.

Помогло и вылечило....

Пофиксил MySql. Добавил код в прогу свою.

Всё заработало только с конструкцией...
QTextCodec *codec=QTextCodec::codecForName("CP-1251",0);
QTextCodec::setCodecForCStrings(codec);

А по умолчанию в Qt кодировка идёт utf8???
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #7 : Август 10, 2005, 14:54 »

раскажи что тебе конкретно помогло

а uft-8 щас популярная кодировка
правда она помоему 2 байта жрет на символ Улыбающийся

все ее и мочат - на koi8-r или utf8
Записан
Slavan
Гость
« Ответ #8 : Август 10, 2005, 15:21 »

Я короче почитал там доки. По ссілам и ещё там коечто....

И короче говоря пришёл к такому выводу, что проще после установки коннекта лучше выполнить запрос.

Плюс у меня глюки с настройками на сервер. Короче пофиксил там посмотрел работу с консоли. понравилось решил попробовать. Получилось конструкцию сейчас с кодеком убрал и таблу задал как utf8 заодно и всю базу. а инсертю теперь просто...
получаю "QString s" в запрос его пихаю s.utf8() пашет как дети в школу пошли.

Хотя с другой стороны, если посмотреть так то, что в секвеле 4.1 и выше сделали такую штуку. Так это правильно. Удобнее. Получается клиент может работать с любой кодировой, только бы серверу сказать об этом.
Я раньше с MySQL не работал, только с ораклёй 8-й. Так в отличии там кодировка жёстко прописывалась..... Как 9ка 10-ка и т.д. не знаю.

Ещё раз спасибо буду дальше изучать доки по секвелю. Мне ещё ф-ции и процедуры нуно научится ваярить.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #9 : Август 10, 2005, 15:34 »

понятно, буду знать на будущее

в 9 Oracle тоже кодировка ручками задается
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 22.