mysql - 如何从 mysqldump 插入 float

标签 mysql floating-point numbers mariadb

我有来自 FirebirdSQL 的 sql 转储文件。看起来与从 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机器上通过命令行导入它。

其他所有内容均已正确导入,但所有 float 均已四舍五入。我的问题是我需要它们。有办法实现吗?问题从何而来?

最佳答案

使用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 |
+--------------------+---------+-------------------+------------------------+

关于mysql - 如何从 mysqldump 插入 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55728453/

相关文章:

c - 钳制真实(固定/浮点)值的最快方法?

c++ - 对数字进行分组 C++

java - 连接 JDBC MySQL 时出现异常

php - 在mysql数据库中保存一段时间的最佳方法?

c++ - 在二进制表示法中,小数点 "."之后的数字是什么意思?

php - 为什么 0.1+0.2-0.3= 5.5511151231258E-17 在 php 中

ruby - 如何有效地清除 Ruby 的负零 float ?

mysql - SQL 请求? Where 子句

java - Java中处理unicode字符并将结果写入mysql和HBase

c++ - 如何从 C++ 中的斐波那契数列中提取质数?