我有来自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机器上通过命令行导入它。
其他所有内容都正确导入,但所有浮动数字都被舍入。我的问题是我需要它们。反正有没有实现它?问题来自哪里?
使用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 |
+--------------------+---------+-------------------+------------------------+