Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Язык MQL5 поддерживает технологию OpenCL. Попробуй сам!
Dmitry
811
Dmitry 2008.03.23 11:36 

Господа, доброго времени суток,

может кто-то сталкивался с кодировками? Феч ряда, вынутого из базы данных выдает следующее:

2008.03.23 12:33:33    2008.03.20 01:01  TicksInMySQL EURUSD,M30: fetched2: XvФZvФ_vФjvФyvФ…vФЋvФ™vФљvФ›vФњvФќvФ¤vФ«vФІvФЅvФЙvФФvФЯvФкvФсvФшvФяvФwФwФwФwФ wФ'wФ.wФ9wФ@wФ3
2008.03.23 12:33:33    2008.03.20 01:01  TicksInMySQL EURUSD,M30: fetched2: X5ФZ5Ф_5Фj5Фy5Ф…5ФЋ5Ф™5Фљ5Ф›5Фњ5Фќ5Ф¤5Ф«5ФІ5ФЅ5ФЙ5ФФ5ФЯ5Фк5Фс5Фш5Фя5Ф6Ф6Ф6Ф6Ф 6Ф'6Ф.6Ф96Ф@6Ф3
2008.03.23 12:33:33    2008.03.20 00:00  TicksInMySQL EURUSD,M30: connected to MySQL server version 5.0.51a
2008.03.23 12:33:33    2008.03.20 00:00  TicksInMySQL EURUSD,M30: allocated
Может кто-то имеет хоть какие-нить идеи на этот счет? :(
Vladimir Gribachev
2
Vladimir Gribachev 2008.03.23 17:51  
Если идет обращение к MySQL серверу с помощью MySQL C API, то 
на стороне клиента в параметрах соединения необходимо указать кодировку, 
в которой будут передаваться строковые данные. 
Нужно поставить "cp2151".
Если не указывать то, как правило, (при дефолтной инсталяции сервера) строки будут приходить в UTF-8.
Dmitry
811
Dmitry 2008.03.23 19:56  
forex-investor писал (а):
Если идет обращение к MySQL серверу с помощью MySQL C API, то
на стороне клиента в параметрах соединения необходимо указать кодировку,
в которой будут передаваться строковые данные.
Нужно поставить "cp2151".
Если не указывать то, как правило, (при дефолтной инсталяции сервера) строки будут приходить в UTF-8.


А да, забыл сказать, что ряд состоит только из числел. В прочем задал cp-1251 тезультат тот же. :(
Vladimir Gribachev
2
Vladimir Gribachev 2008.03.23 21:59  
Судя по приведенным логам суть проблемы иммено в том, что
от сервера клиенту приходит строка в кодировке UTF-8, которая из dll
пробрасывается в код на mql4, где эта строка отображается естественно
в cp1251.

Это говорит о том, что при установлении коннекта к MySQL в dll неправильно
задаеся кодировка клиента.

Делаться это должно примерно так:
    if (!mysql_init(&conn))
    {
        printf("Can't create mysql descriptor\n");
        return 0;
    }
    mysql_options(&conn, MYSQL_SET_CHARSET_DIR, "C:\\Program Files\\MySQL\\MySQL Server 5.0\\share\\charsets");
    mysql_options(&conn, MYSQL_SET_CHARSET_NAME, "cp1251");
 
    printf("try connect: \n");
    if (!mysql_real_connect(&conn, "localhost", "user1", "pass", "database1", 0, NULL, 0))
    {
        printf("Can't connect to database: %d\n", mysql_errno(&conn));
        return 0;
    }

Если этот кусок кода не поможет, то не знаю в чем дело.
Dmitry
811
Dmitry 2008.03.24 12:30  

Крайне красиво, спасибо! :)

Evgeny Potapov
1628
Evgeny Potapov 2011.05.16 06:09  
Red.Line:

Крайне красиво, спасибо! :)

А можете показать какие конкретно DLL подключены и как произведён импорт

(и ещё где скачаны, а то, может, не везде они лежат исправные) 

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий