Russian Qt Forum

Qt => Базы данных => Тема начата: Slavan от Август 10, 2005, 11:51



Название: Help кодировка в MySQL
Отправлено: 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 тот же результат......


второй день голову ломаю :( помогите плз.....

Заранее благодарен.


Название: Help кодировка в MySQL
Отправлено: jindos от Август 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 от Август 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+"');");
добавляет '??????'

Но есть продвижение букву 'ч' стало нормально постить


Название: Help кодировка в MySQL
Отправлено: jindos от Август 10, 2005, 13:06
Пробовал шрифт для lineEdit1 на ("smallsmooth", 11) устанавливать?

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

И напиши, какие были изменения при применении этих способов...


Название: :(
Отправлено: Slavan от Август 10, 2005, 13:29
Не не помогло.
Может базу я настроил не правильно. Какие параметры чарсетов для базы дожны быть???? везде utf8???????
Может я действительно где-то обшибся....


Название: Help кодировка в MySQL
Отправлено: Admin от Август 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



Название: то ADMIN
Отправлено: Slavan от Август 10, 2005, 14:18
Огромное преогромное спасибо.

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

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

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

А по умолчанию в Qt кодировка идёт utf8???


Название: Help кодировка в MySQL
Отправлено: Admin от Август 10, 2005, 14:54
раскажи что тебе конкретно помогло

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

все ее и мочат - на koi8-r или utf8


Название: SNKS
Отправлено: Slavan от Август 10, 2005, 15:21
Я короче почитал там доки. По ссілам и ещё там коечто....

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

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

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

Ещё раз спасибо буду дальше изучать доки по секвелю. Мне ещё ф-ции и процедуры нуно научится ваярить.


Название: Help кодировка в MySQL
Отправлено: Admin от Август 10, 2005, 15:34
понятно, буду знать на будущее

в 9 Oracle тоже кодировка ручками задается