【问题标题】:Why can't load the data into mysql:为什么不能将数据加载到mysql中:
【发布时间】:2019-04-29 16:25:34
【问题描述】:

Mysql表price结构:

CREATE TABLE `price` (
  `code` varchar(12) ,
  `date` date ,
  `open` decimal(8,2) ,
  `high` decimal(8,2) ,
  `low` decimal(8,2) ,
  `close` decimal(8,2) ,
  `amount` decimal(20,2) ,
  `volume` decimal(16,2) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这是我要加载到 tablbe price 的 data.csv 文件。

000046.XSHE,19940912,20.0,20.0,16.0,16.92,121262592.0,7043300
000046.XSHE,19940913,17.0,17.32,16.0,16.46,47195860.0,2810800
000046.XSHE,19940914,16.3,16.4,15.49,15.95,24762992.0,1558300

音量的最大值是47195860.0,在decimal(20,2)的范围内。

用 mysql load 命令加载它。

LOAD DATA local INFILE 'data.csv'
    INTO TABLE finance.price
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    lines terminated by '\r\n';

出现错误信息:

Query OK, 1 row affected, 1 warning (0.09 sec)       
Records: 1  Deleted: 0  Skipped: 0  Warnings: 1

显示它以获得原因。

show warnings;
+---------+------+---------------------------------------------+
| Level   | Code | Message                                     |
+---------+------+---------------------------------------------+
| Warning | 1265 | Data truncated for column 'volume' at row 1 |
+---------+------+---------------------------------------------+
1 row in set (0.00 sec)

数字121262592.0decimal(20,2) 小很多,为什么Data truncated for column 'volume' at row 1,只加载了一行。

select * from price;
+-------------+------------+-------+-------+-------+-------+--------------+------------+
| code        | date       | open  | high  | low   | close | amount       | volume     |
+-------------+------------+-------+-------+-------+-------+--------------+------------+
| 000046.XSHE | 1994-09-12 | 20.00 | 20.00 | 16.00 | 16.92 | 121262592.00 | 7043300.00 |
+-------------+------------+-------+-------+-------+-------+--------------+------------+
1 row in set (0.00 sec)

【问题讨论】:

  • 可能是您的输入文件没有\r\n 行终止。
  • DECIMAL(16,2) 表示只存储小数点后两位。为避免截断,您应该使用 DECIMAL(20,7) 例如。至于不加载到表中,您可能需要检查文件中的行终止(可能是 \n 而不是 \r\n)并在 ENCLOSED 之前添加“可选”字样。
  • 附上比尔的问题,你能把\r\n换成\n再试一次吗?
  • 你加载了多少行?如果只有一排,让我们看看。如果有很多行,请注意只有一行有问题;看看能不能找到。

标签: mysql database decimal truncated


【解决方案1】:
LOAD DATA local INFILE 'data.csv'
    INTO TABLE finance.price
    FIELDS TERMINATED BY ','
    OPTIONAL  ENCLOSED BY '"'
    lines terminated by '\r\n';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多