Как вставить числа с плавающей точкой из mysqldump - PullRequest
1 голос
/ 17 апреля 2019

У меня есть файл дампа sql из FirebirdSQL. Выглядит так же, как экспортировано из MySQL (MariaDB). В указанном файле есть операторы создания таблиц, одним из которых являются следующие:

CREATE TABLE VALIORS (
....,
    STK_SUM      FLOAT DEFAULT 0,
    TWO_PERC     FLOAT,
....,
);

Позже в файле содержатся следующие операторы вставки:

INSERT INTO VALIORS (...., SZK_ND,TWO_PERC, ....) values (...., 10039.349609375,200.78999328613281, ....);
INSERT INTO VALIORS (...., SZK_ND,TWO_PERC, ....) values (...., 10039.349609375,200.78999328613281, ....);

Весь файл больше, чем 500 МБ, поэтому я импортирую его только через командную строку на машине Windows с установленным xampp.

Все остальное импортируется правильно, но все числа с плавающей точкой округляются. Моя проблема в том, что они мне нужны. Есть ли способ добиться этого? И откуда проблема?

1 Ответ

1 голос
/ 17 апреля 2019

Используйте DOUBLE тип данных для хранения значений с большей точностью; но это все еще не гарантирует, что значения будут сохранены как есть. Если вы хотите сохранить значения как есть, используйте DECIMAL(m, d) тип данных.

CREATE TABLE test(
    str VARCHAR(100),
    flt FLOAT,
    dbl DOUBLE,
    dcm DECIMAL(26, 16)
);
INSERT INTO test(str, flt, dbl, dcm) VALUES
    ('10039.349609375',    10039.349609375,    10039.349609375,    10039.349609375),
    ('200.78999328613281', 200.78999328613281, 200.78999328613281, 200.78999328613281);
SELECT * FROM test;

Результат:

+--------------------+---------+-------------------+------------------------+
| str                | flt     | dbl               | dcm                    |
+--------------------+---------+-------------------+------------------------+
| 10039.349609375    | 10039.3 |   10039.349609375 | 10039.3496093750000000 |
| 200.78999328613281 |  200.79 | 200.7899932861328 |   200.7899932861328100 |
+--------------------+---------+-------------------+------------------------+
...