如何从mysqldump插入浮点数

问题描述 投票:1回答:1

我有来自FirebirdSQL的sql dump文件。看起来与从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 MB,所以我只在安装了xampp的windows机器上通过命令行导入它。

其他所有内容都正确导入,但所有浮动数字都被舍入。我的问题是我需要它们。反正有没有实现它?问题来自哪里?

mysql floating-point numbers mariadb
1个回答
1
投票

使用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 |
+--------------------+---------+-------------------+------------------------+
© www.soinside.com 2019 - 2024. All rights reserved.