|
|
|
|
|
для: cheops
(07.06.2006 в 00:54)
| | Мне наконец-то удалось совладать с "??????" при кодировке cp1251!
В my.ini в секцию [mysqld] заносим skip-character-set-client-handshake, что ведет к тому, что сервер игнорирует кодировку от клиента.
И все работает! Но есть одна тонкость. Нужно ОБЯЗАТЕЛЬНО ПЕРЕЗАГРУЗИТЬ сервер - остановка и запуск сервиса. Иначе только после перезагрузки машины все сработает (сервер перезагрузится).
Спасибо за советы и поддержку! | |
|
|
|
|
|
|
|
для: kvesda
(06.06.2006 в 22:03)
| | Скорее всего не MySQL - это ничего не даст, механизм перекодировки сейчас уже не выключить, а ODBC придётся перекомпилировать... У вас нет возможности попробовать версию 4.0.x - с ней кодировки нормально в приложении отображаются? | |
|
|
|
|
|
|
|
для: cheops
(06.06.2006 в 10:45)
| | Да, я скачал версию ODBC 3.51 с официального сайта MySQL AB.
Я попробовал с нуля - переустановил сервер MySQL сразу под cp1251. Создал таблицу с ср1251 и просмотрел через свою программу - увы, "???'. Может нужно перекомпилировать сервер сразу под кодировку ср1251? Уж больно не хочется отказываться от MySQL - много кода и времени ушло! Может что не так с ситемой WinXPSP2? Может я что-то упускаю в установке и настройке сервера? Если не тяжело, опишите по шагам процесс сервера и коннекта к неме настройки - где, что. как.
Спасибо. Вадим. | |
|
|
|
|
|
|
|
для: kvesda
(05.06.2006 в 22:13)
| | >Может, я ADO недонастроил?
Хм... я насколько помню там драйвер нужен - вы его брали с dev.mysql.com?
PS Я лично через ADO не пробовал связываться - всегда предпочитая прямые драйвера вроде dbExpress. | |
|
|
|
|
|
|
|
для: cheops
(05.06.2006 в 19:54)
| | Данные в базу (тестовая для отладки структуры базы и алгоритмов) я загружаю сторонним клиентом EMS MySQL Manager 2005.
Сам EMS MySQL Manager 2005 отображает данные при cp1251 прекрасно - по-русски. Другой клиент MySQL Query Browser тоже отображает результаты запросов к ЭТОЙ базу по-русски.
А вот моя программа (на WTL) - нет - '????'. И это после
_bstr_t bstrCP2151 = "SET NAMES 'cp1251';";
m_myConn->Execute(bstrCP2151,NULL,NULL);
Таблицы создавались в EMS MySQL Manager 2005 уже с кодировкой cp1251 по умолчанию. И данные заносились уже "под этой кодировкой". Вот часть листинга:
CREATE DATABASE 'my_db'
CHARACTER SET 'cp1251'
COLLATE 'cp1251_general_ci';
...
CREATE TABLE 'areas' (
'area_id' int(11) unsigned NOT NULL auto_increment COMMENT 'NonUnique, PK',
'area' varchar(20) NOT NULL COMMENT 'районы',
PRIMARY KEY ('area_id'),
UNIQUE KEY 'area' ('area')
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
...
INSERT INTO 'areas' ('area_id', 'area') VALUES
(1,'Рязанский'),
(2,'Пронский'),
(3,'Михайловский'),
(4,'Рыбновский'),
(5,'Скопинский');
COMMIT;
Может, я ADO недонастроил? | |
|
|
|
|
|
|
|
для: kvesda
(05.06.2006 в 19:47)
| | А русские слова попали туда из программы или при помощи стороннего клиента? Дело в том, что если русский текст помещался в базу данных без настройки кодировки соединения он так и остаётся искажённым (в виде знаков вопросов) и восстановить его уже нельзя - только перегружать. Другие клиенты нормально отображают русский текст, который вы тянете через ADO? | |
|
|
|
|
|
|
|
для: cheops
(05.06.2006 в 02:51)
| | Что-то у меня не получилось. Подключаюсь к серверу MySql так:
ADODB::_ConnectionPtr m_myConn;
_bstr_t bstrConnStr = "DSN="+bstrMyDSN+";DATABASE="+bstrDataBase+";SERVER="+bstrServer+";PORT="+bstrPort;
m_myConn.CreateInstance("ADODB.Connection");
_bstr_t bstrCP2151 = "SET NAMES 'cp1251';";
m_myConn->Execute(bstrCP2151,NULL,NULL);
Делаю запрос:
_variant_t vtQuery = "SELECT * FROM Table1;";
ADODB::_RecordsetPtr my_rs;
my_rs.CreateInstance("ADODB.Recordset");
my_rs->Open(vtQuery,m_myConn.GetConnectionString(),ADODB::adOpenStatic,ADODB::adLockOptimistic,ADODB::adCmdText);
В результате все равно русские слова имеют вид '???????'.
Что я сделал неправильно? | |
|
|
|
|
|
|
|
для: kvesda
(04.06.2006 в 22:15)
| | Вообще при работе из С/С++ под Windows сейчас неразрешимых проблем с кодировкой и сортировкой русского текста нет (придётся повозится с преобразованиями, но к этому быстро привыкаешь), кроме того в состав MySQL входит встроенный сервер (как в InterBase), что позволяет создавать достаточно гибкое ПО. | |
|
|
|
|
|
|
|
для: cheops
(04.06.2006 в 20:40)
| | Я только недавно перешел на MySQL - очень понравился. Так что благодарен за любые советы. Спасибо за совет, завтра попробую. | |
|
|
|
|
|
|
|
для: kvesda
(04.06.2006 в 16:10)
| | >????? ??? ??
Перед работай с русским текстом необходимо выставить кодировку соедиения при помощи оператора SET NAMES
т.е. установили соединение с сервером MySQL - сразу выполняйте этот запрос.
>Если набиваю через консольный клиент mysql
А кодировку командной строки меняете - там ведь cp866 по умолчанию. В windows XP её можно изменить при помощи команды
после этого можно загружать консольный клиент mysql.exe. | |
|
|
|
|