Simple-Scada forum

Simple-Scada 2 => Ошибки => Тема начата: Hunger от 16 Января 2020, 21:55:32

Название: Проблема записи в БД MySql
Отправлено: Hunger от 16 Января 2020, 21:55:32
Добрый день,
Периодически возникает проблема.
База данных MySql. Пишу в базу дробные числа, заметил, что иногда дробная часть пропадает. Помогает перезапуск сервера, но не всегда.
То есть изменений в скриптах нет, сначала пишет нормально, а через какое-то время без дробной части.
Включил лог SQL запросов. В команде INSERT число полностью с дробной частью. Тип данных DECIMAL(10,4).
Например:
Код
Query: INSERT IGNORE INTO `ydr` (`timestamp`, `value`) VALUES (NOW(), '5,91556856420059')
А в базе уже ровно 5.0000
В примере число, зависящее от расхода, но тоже самое происходит и с постоянными числами (шаблон квадратуры) скрин во вложении.
Не могу понять, что происходит.
Беру запрос и вставляю напрямую в MySQL выдает предупреждение, но при замене запятой на точку в запросе всё проходит, если нет, то дробная часть обнуляется.
Название: Re: Проблема записи в БД MySql
Отправлено: Hunger от 17 Января 2020, 11:14:55
Продолжил писать логи.
Другая переменная пишется по изменению.
Сначала один запрос с точкой, через пол минуты с запятой:
Код
RunSQL | 16.01.20 | 20:52:38 | scales_2: 7 | Tag: 0 | Query: INSERT IGNORE INTO `massa2` (`timestamp`, `value`) VALUES (NOW(), '-3.41')
Код
RunSQL | 16.01.20 | 20:53:06 | scales_2: 7 | Tag: 0 | Query: INSERT IGNORE INTO `massa2` (`timestamp`, `value`) VALUES (NOW(), '-3,42')

С запятой в БД -3.0000

Как это возможно из одного скрипта?
Название: Re: Проблема записи в БД MySql
Отправлено: Simple-Scada от 17 Января 2020, 12:01:56
Здравствуйте.

Это стандартная проблема с десятичным разделителем для вещественных чисел. При запуске скады разделителем является ".". Некоторые сторонние программы (было замечено с TeamViewer), либо действия пользователя (например выход из системы и последующий вход) могут приводить к смене десятичного разделителя на ",", что и происходит в Вашем случае, судя по описанию. Чтобы устранить эту проблему, около года назад мы изменили работу функции FormatFloat (https://simple-scada.com/help/script/formatfloat.html) и свойств переменной (как Variable.AsStr (https://simple-scada.com/help/script/varasstr.html) и Varaible.AsUTF8String (https://simple-scada.com/help/script/varasutf8string.html)) и теперь они всегда используют "." в качестве разделителя, что исключает любые ошибки, игнорируя региональные настройки Wndows и т.п. Используйте вышеописанные функции чтобы исключить ошибки. Либо приведите код скрипта, мы изменим его на правильный.

Второй вариант, который может решить проблему: изменить десятичный разделитель в Windows на точку. Меняется через "панель управления - региональные стандарты - дополнительные параметры - разделитель целой и дробной части".
Название: Re: Проблема записи в БД MySql
Отправлено: Hunger от 17 Января 2020, 13:02:13
Спасибо за ответ, помогло.