Тип данных при выгрузке в MySQL через ODBC. Баг?

Страницы: 1
RSS
Тип данных при выгрузке в MySQL через ODBC. Баг?, Поле "инструмент"
 
Здравствуйте!
При выборе сопоставляемого поля MySQL таблицы для параметра "Инструмент" доступны почему-то только типы: DATE, TIME, DATETIME. Все остальные доступные типы (TEXT, CHAR, VARCHAR) в выпадающем списке просто отсутствуют, хотя это самый что ни на есть TEXT. ЧЯДНТ?
 
Забыл указать:
MySQL server version: 5.7.15
Protocol version: 10
Server charset:                    UTF-8 Unicode           (utf8
 
Цитата
AndyJOKER написал:
Забыл указать:
MySQL server version: 5.7.15
Protocol version: 10
Server charset:                    UTF-8 Unicode           (utf8
Добрый день,

Дополнительно просьба сообщить версию рабочего места QUIK, а также прислать скриншот таблицы в MySQL, где были бы видны настроенные типы данных для полей "dat", "_dattim", "_timst", "_tim".
 
QUIK 7.14.1.7

 
В ODBC используется MySQL ODBC 5.3 Unicode Driver.
 
Аналогичная проблема с текстовым типом данным и в таблице обезличенных сделок:


ODBC драйверы:


Ошибка проявляется одинаково вне зависимости от разрядности ОСи и драйверов. Пробовал на Win7 x86 и Win7 x64.
 
Еще одна проблема. Формат даты в MySQL по-умолчанию имеет вид 'YYYY-DD-MM', и, насколько мне известно изменить его нельзя. Т.е. работать приходится через:
Код
INS ERT IN TO `table` (`dat`) VALUES (STR_TO_DATE('13.12.2017','%d.%m.%Y'))
и
Код
SEL ECT DATE_FORMAT(dat,'%d.%m.%Y') FR OM `table`
Судя по quik_odbc попытка записи идет через
Цитата
12/14/17 11:35:23.132 [TID=4552] Poke Data, table = tick8, henv = 02A0FCA8, hdbc = 02A0F648, insert_into_table = 02A0FE58, update_table = 02A10180, delete_from_table = 02A104A8, hstmt = 02A0FE58, SQL statement = "INS ERT IN TO table.tick (dat, tim, price, val) VALUES ('13.12.2017', '19:00:00', 63.1500, 1.00000000)"
Поэтому в итоге получаем:

В обмене данными через ODBC не специалист, поэтому вопрос: самостоятельно руками в QUIK можно где-нибудь добавить для всех INSERT STR_TO_DATE или это всё hard-coded?
Попутно просьба ткнуть носом где удалось подружить QLUA и MySQL - пока в качеств временного решения проблемы.
Благодарю.
 
Цитата
AndyJOKER написал:
Аналогичная проблема с текстовым типом данным и в таблице обезличенных сделок:


ODBC драйверы:


Ошибка проявляется одинаково вне зависимости от разрядности ОСи и драйверов. Пробовал на Win7 x86 и Win7 x64.
Добрый день,

Ваше сообщение получено, проблема изучается. Постараемся в ближайшее     время дать ответ.
 
Цитата
AndyJOKER написал:
Еще одна проблема. Формат даты в MySQL по-умолчанию имеет вид 'YYYY-DD-MM', и, насколько мне известно изменить его нельзя. Т.е. работать приходится через:
Код
  INS ERT  IN  TO `table` (`dat`) VALUES (STR_TO_DATE( '13.12.2017' ,'%d.%m.%Y'))  
и
Код
  SEL ECT DATE_FORMAT(dat,'%d.%m.%Y') FR OM `table`  
Судя по quik_odbc попытка записи идет через
Цитата
12/14/17 11:35:23.132 [TID=4552] Poke Data, table = tick8, henv =  02A0FCA8, hdbc = 02A0F648, insert_into_table = 02A0FE58, update_table =  02A10180, delete_from_table = 02A104A8, hstmt = 02A0FE58, SQL statement =  "INS ERT IN TO table.tick (dat, tim, price, val) VALUES ('13.12.2017',  '19:00:00', 63.1500, 1.00000000)"
Поэтому в итоге получаем:
Средствами QUIK изменить формат даты к сожалению, нельзя.
Вы можете сделать это с помощью функционала триггеров MySQL.
Цитата
AndyJOKER написал:
В обмене данными через ODBC не специалист, поэтому вопрос: самостоятельно руками в QUIK можно где-нибудь добавить для всех INSERT STR_TO_DATE или это всё hard-coded?
Попутно просьба ткнуть носом где удалось подружить QLUA и MySQL - пока в качеств временного решения проблемы.
К сожалению, информации по использованию QLUA в MySQL у нас нет. Для изменения формата даты рекомендуем воспользоваться функционалом триггеров в MySQL.
 
Триггерами это пофиксить не удается. Ни так:
Код
CREATE TRIGGER `trig` BEFORE INSERT ON `temp`
 FOR EACH ROW BEGIN
INS ERT IN TO ticks (`tick_date`,`tick_time`,`tick_price`,`tick_val`) VALUES (NEW.dat, NEW.tim, NEW.price, NEW.val);
END
Ни так:
Код
CREATE TRIGGER `trig` BEFORE INSERT ON `temp`
 FOR EACH ROW BEGIN
INS ERT IN TO ticks (`tick_date`,`tick_time`,`tick_price`,`tick_val`) VALUES (STR_TO_DATE(NEW.dat,'%d.%m.%Y'), NEW.tim, NEW.price, NEW.val);
END
Ни так:
Код
CREATE TRIGGER `trig` BEFORE INSERT ON `temp`
 FOR EACH ROW BEGIN
INS ERT IN TO ticks (`tick_date`,`tick_time`,`tick_price`,`tick_val`) VALUES (DATE_FORMAT(NEW.dat,'%d.%m.%Y'), NEW.tim, NEW.price, NEW.val);
END
Ни так:
Код
CREATE TRIGGER `trig` BEFORE INSERT ON `temp`
 FOR EACH ROW BEGIN
INS ERT IN TO ticks (`tick_date`,`tick_time`,`tick_price`,`tick_val`) VALUES (CONVERT(NEW.dat,DATE), NEW.tim, NEW.price, NEW.val);
END
Неужели я первый, кто выбрал связку QUIK -> ODBC -> MySQL...
 
Проблема сопоставления полей решилась заменой с Unicode на ANSI драйвер в ODBC:



Т.е. проблема проявляется только на Unicode драйвере. Буду признателен, если кто подскажет по триггеру с подменой формата даты при INSERT.
 
Вторая проблема также решена. Пример для таблицы обезличенных сделок:
Код
CRE ATE   TABLE `temp` (
  `id` int(10) UNSIGNED NOT NULL,
  `t_date` char(10) NOT NULL,
  `t_time` time NOT NULL,
  `t_price` decimal(6,2) UNSIGNED NOT NULL,
  `t_val` int(11) NOT NULL,
  `t_op` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

CRE ATE   TABLE `tick` (
  `id` int(10) UNSIGNED NOT NULL,
  `t_d` date NOT NULL,
  `t_t` time NOT NULL,
  `t_p` decimal(6,2) UNSIGNED NOT NULL,
  `t_v` int(10) UNSIGNED NOT NULL,
  `t_op` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Триггер:
Код
CREATE TRIGGER `temp` BEFORE INSERT ON `temp`
 FOR EACH ROW BEGIN
INS ERT IN TO tick VALUES(NEW.id, STR_TO_DATE(NEW.t_date,'%d.%m.%Y'), NEW.t_time, NEW.t_price, NEW.t_val, NEW.t_op);
END
Страницы: 1
Читают тему
Наверх