This issue is hard to reproduce, it happens 10 times in last 24 hours

duration_hr is a field with type Decimal (13, 4), I found some abnormal conversion during the ClickHouse replication, as below:
```
MySQL     ClickHouse
0.3333 -> -2147483653.2202
0.5000 -> -2147483653.0535
0.1667 -> -2147483653.3868
0.0833 -> -2147483653.4702
0.7500 -> -2147483652.8035
```
As you can see, a weired one among the normal ones:
```
│ HCAC    │ 2020-10-22 07:10:00 │           0.3333 │
│ HCAC    │ 2020-10-22 07:15:00 │           0.3333 │
│ HCAC    │ 2020-10-22 07:20:00 │           0.3333 │
│ HCAC    │ 2020-10-22 07:25:00 │           0.3333 │
│ HCAC    │ 2020-10-22 07:30:00 │           0.3333 │
│ HCAC    │ 2020-10-22 07:35:00 │ -2147483653.2202 │
│ HCAC    │ 2020-10-22 07:40:00 │           0.3333 │
│ HCAC    │ 2020-10-22 07:45:00 │           0.3333 │
│ HCAC    │ 2020-10-22 07:50:00 │           0.3333 │
│ HCAC    │ 2020-10-22 07:55:00 │           0.3333 │
│ HCAC    │ 2020-10-22 08:00:00 │           0.3333 │
│ HCAC    │ 2020-10-22 08:05:00 │           0.3333 │
```


-Lyon
{
                        UInt32 sec = 0, fsp = 0;
                        readBigEndianStrict(payload, reinterpret_cast<char *>(&sec), 4);
                        readTimeFractionalPart(payload, fsp, meta);
                        if (!meta)
                            row.push_back(Field{sec});
                        else
                        {
                            DB::DecimalUtils::DecimalComponents<DateTime64> components{
                                static_cast<DateTime64::NativeType>(sec), 0};
                            components.fractional = fsp;
                            row.push_back(Field(DecimalUtils::decimalFromComponents<DateTime64>(components, meta)));
                        }
                        break;
                    }
                    case MYSQL_TYPE_NEWDECIMAL:
                    {
                        const auto & dispatch = [](size_t precision, size_t scale, const auto & function) -> Field
                        {
                            if (precision <= DecimalUtils::max_precision<Decimal32>)
                                return Field(function(precision, scale, Decimal32()));
                            else if (precision <= DecimalUtils::max_precision<Decimal64>) 
                                return Field(function(precision, scale, Decimal64()));
                            else if (precision <= DecimalUtils::max_precision<Decimal128>) 
                                return Field(function(precision, scale, Decimal128()));
                            return Field(function(precision, scale, Decimal256()));
                        };
                        const auto & read_decimal = [&](size_t precision, size_t scale, auto decimal)
                        {
                            using DecimalType = decltype(decimal);