Десятичные данные неправильно хранятся в базе данных по доктрине - PullRequest
0 голосов
/ 12 сентября 2018

В одном из моих приложений Symfony я столкнулся со странным поведением доктрины ODM.То, что я пытаюсь сделать, это просто сохранить десятичные данные в нашей базе данных Informix.Всякий раз, когда я пытаюсь это сделать, все, что находится за десятичным разделителем, обрезается.

Я пробовал несколько способов назначения данных, таких как:

  • $ position-> setFrpProz (1.2345);
  • $ position-> setFrpProz ("1.2345");
  • $ position-> setFrpProz ("1,2345");

Результат в базе данных всегда: 1.0000

Это yml для сущности:

frpProz:
        type: decimal
        nullable: true
        precision: 10
        scale: 4
        column: frp_proz

В Informix поле базы данных также определяется как десятичное число (10,4).

Я уже пробовалDoctrine EchoSQLLogger со следующими результатами (сокращенно):

"START TRANSACTION"
UPDATE st_frb_mpos SET frp_proz = ?, [...] WHERE [...]
array(15) {
  [0]=>
  string(6) "1.2345"
                          [...]
}
array(15) {
  [0]=>
  string(7) "decimal"
                          [...]
}
"COMMIT"
"okay"

Я действительно не знаю, как решить эту проблему.Я уже пытался обновить свое приложение с Symfony 2.8.до 3.4.15 - без разницы в этой теме.

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Хотя в Informix вы определили принимающий столбец как DECIMAL (10,4), он действует так, как вы определили его как DECIMAL (10,0) и округляя от 1,2345 до 1,0000, поэтому, возможно, Symfony округлил его до 1,0000 перед отправкой в ​​Informix? .. Я подозреваю, что происходит, потому что в Informix отображаются 4 десятичных ноля, которые являются допустимым значением для точности / масштаба, которые вы определили.Поэтому я предлагаю вам изучить параметры поля NumberType Symfony frp_proz, такие как scale и rounding_mode, чтобы узнать, преобразуется ли число в Symfony.

https://symfony.com/doc/current/reference/forms/types/number.html

Вы экспериментировали с приведением его к CHAR перед отправкой в ​​Informix или определяли столбец Informix как тип данных FLOAT, чтобы увидеть результат?

0 голосов
/ 12 сентября 2018

вы неправильно понимаете значение масштаба.

Взято из документов mysql .

Точность представляет количество значащих цифр, которые сохраняются для значений, а шкала представляет количество цифр, которые можно сохранить после десятичной точки.

Поскольку вы указали 10,4, база данных хранит только 4 десятичных знака справа от точки.

Точность - это общее количество цифр, которое будет сохранено. Таким образом, 10,4 позволит вам хранить такие значения, как 123456.7890

Возможно, любое сохраненное вами значение будет обрезано до 4 десятичных знаков.

...