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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Непонятности с кодировками  (Прочитано 4831 раз)
cresta
Гость
« : Март 21, 2009, 14:38 »

Добрый день. Есть проблема с кодировками. Может дело и не в самой qt, а может и в ней.
Таблица №1:
Код:
CREATE TABLE `table2` (
  `code` varchar(15) NOT NULL default '',
  `category` varchar(50) NOT NULL default '',
  `product` varchar(100) NOT NULL default '',
  `supplier` varchar(50) NOT NULL default '',
  `unit` varchar(16) NOT NULL default '',
  `inprice` decimal(10,2) NOT NULL default '0.00',
  `outprice` decimal(10,2) NOT NULL default '0.00',
  `paid` decimal(10,2) NOT NULL default '0.00',
  `percent` double NOT NULL default '0',
  `count` double NOT NULL default '0',
  `notetext` varchar(150) default NULL,
  `notedigit` double default NULL,
  `extra` double default NULL,
  UNIQUE KEY `code_2` (`code`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

Таблица №2:
Код:
CREATE TABLE `users` (
  `user` varchar(18) NOT NULL,
  `password` varchar(18) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

Collation в обоих случаях cp1251_general_ci

Почему при чтении из первой таблицы требуется установить SET NAMES cp1251, а при чтении из второй utf8 ?

Это бага qt или mysql?
Записан
_OLEGator_
Гость
« Ответ #1 : Март 21, 2009, 16:27 »

скорее всего mysql, "SET NAMES cp1251" я вызывал при использовании mysql в php, иначе кодировка была неверной.
возможно это еще зависит от версии mysql.
Записан
cresta
Гость
« Ответ #2 : Март 21, 2009, 20:55 »

Похоже, что это QSqlQuery голову морочит:
Создал базу данных с нуля, опять две таблицы с DEFAULT CHARSET cp1251.
И опять из одной таблицы читается нормально, из другой кракозябрами, от которых можно избавиться только через set names utf8.

Для проверки состряпал сайтик с таким php-скриптом:

Цитировать
<?
         mysql_connect("localhost", "root", "") or die ("Could not connect");
            mysql_select_db ("seller") or die ("Could not select database");
            mysql_query("SET NAMES cp1251");
            $query = "SELECT * FROM `users`";
            $a = mysql_query($query);
            while ( $r=mysql_fetch_assoc($a) ){
               echo $r['user'];
               ?><br><?
               echo $r['password'];   
               ?><br><?
            }
?>

Все шикарно отбражается.
А из Qt при обращении к этой таблице кракозябры, пока не сделаешь SET NAMES utf8



Записан
BaltikS
Гость
« Ответ #3 : Март 22, 2009, 00:24 »

скорее всего mysql, "SET NAMES cp1251" я вызывал при использовании mysql в php, иначе кодировка была неверной.
возможно это еще зависит от версии mysql.
+1, какая версия MYSQL? если 5, то что что то подобное я припоминаю....
Записан
cresta
Гость
« Ответ #4 : Март 22, 2009, 00:52 »

версия пятая. Погуглил, такая ошибка довольно часто встречается, вот только из способов её решения ни один не дал результата.

Если дело в конфигурации сервера/клиента mysql, то почему php корректно работает с кодировками, а qt - нет?

И что делать? Переходить на utf8? Или на koi8-r ?

P.S.
Сейчас вот ещё посмотрел утилитой mysql.exe: всё шикарно отображается.
« Последнее редактирование: Март 22, 2009, 01:10 от cresta » Записан
BaltikS
Гость
« Ответ #5 : Март 22, 2009, 01:09 »

У меня была кодировка win1251  и  слдующие запросы спасали...
Код:
set character_set_client='cp1251; 
set character_set_results='cp1251;
set collation_connection='cp1251_general_ci;
Правда, честно, не помню версию  Qt
Записан
cresta
Гость
« Ответ #6 : Март 22, 2009, 01:15 »

Эти варианты я пробовал:
character_set_database
character_set_server
character_set_client
character_set_results
Записан
BaltikS
Гость
« Ответ #7 : Март 22, 2009, 01:34 »

ТОгда я сдаюсь  Непонимающий
Записан
Kalombo
Гость
« Ответ #8 : Март 22, 2009, 09:55 »

Попробуй всё-таки себя убедить, что это не баг, а ты не нашел ошибку, сколько раз такое было, что мелочи какой-то не замечал, думал баг, потом обнаруживалась моя невнимательность. С MySQL тоже был подобное было, было несколько таблиц, ну представим, что две, в одну данные добавлялись, в другую нет, везде кодировка стояла cp-1251, понять не мог в чем причина. На форуме спрашивал, думал как там эти кодировки конвертировать и т.д., тоже эксперименты проводил, которые подтолкнули меня на вывод, что это баг Qt, а потом с помощью MySQL Administrator зашел и увидел, что для той таблицы, в которую не добавлялись данные у колонок не стоит нужная кодировка.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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