Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Проблема записи в БД MySql  (Прочитано 1726 раз)

Hunger

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Проблема записи в БД MySql
« : 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 выдает предупреждение, но при замене запятой на точку в запросе всё проходит, если нет, то дробная часть обнуляется.

Hunger

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Проблема записи в БД MySql
« Ответ #1 : 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

Как это возможно из одного скрипта?
« Изменён: 17 Января 2020, 11:18:00 от Hunger »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Проблема записи в БД MySql
« Ответ #2 : 17 Января 2020, 12:01:56 »
Здравствуйте.

Это стандартная проблема с десятичным разделителем для вещественных чисел. При запуске скады разделителем является ".". Некоторые сторонние программы (было замечено с TeamViewer), либо действия пользователя (например выход из системы и последующий вход) могут приводить к смене десятичного разделителя на ",", что и происходит в Вашем случае, судя по описанию. Чтобы устранить эту проблему, около года назад мы изменили работу функции FormatFloat и свойств переменной (как Variable.AsStr и Varaible.AsUTF8String) и теперь они всегда используют "." в качестве разделителя, что исключает любые ошибки, игнорируя региональные настройки Wndows и т.п. Используйте вышеописанные функции чтобы исключить ошибки. Либо приведите код скрипта, мы изменим его на правильный.

Второй вариант, который может решить проблему: изменить десятичный разделитель в Windows на точку. Меняется через "панель управления - региональные стандарты - дополнительные параметры - разделитель целой и дробной части".

Hunger

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Проблема записи в БД MySql
« Ответ #3 : 17 Января 2020, 13:02:13 »
Спасибо за ответ, помогло.