提问人:Apojoost 提问时间:2/18/2022 最后编辑:Apojoost 更新时间:3/29/2022 访问量:795
为什么在MYSQL中导入CSV时行中的数据被截断?
Why is the data in row truncated when importing CSV in MYSQL?
问:
我在Mysql中有一个表,如下所示:
CREATE TABLE `overig`.`test`(
`ID` INT(10) AUTO_INCREMENT,
`Order_ID` DECIMAL(10) NOT NULL,
`Price_total` DECIMAL(12,2),
PRIMARY KEY (`ID`)
);
我想导入以下 CSV:
Order_ID;Price_total
145131343;118,35
145131349;79,35
我将CSV数据加载到MYSQL表中:
LOAD DATA LOCAL INFILE 'test.csv' INTO TABLE `overig`.`test`
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(`Order_ID`, @Price_total)
SET `Price_total` = 0 + REPLACE(@Price_total, ',', '.');
响应:
Query OK, 2 rows affected, 1 warning (0.04 sec)
Records: 2 Deleted: 0 Skipped: 0 Warnings: 1
mysql> show warnings;
+-------+------+--------------------------------------------------+
| Level | Code | Message |
+-------+------+--------------------------------------------------+
| Note | 1265 | Data truncated for column 'Price_total' at row 2 |
+-------+------+--------------------------------------------------+
为什么我会收到此警告?第 2 行和第 3 行的值有什么区别?
结果还可以,但我想了解警告。
mysql> select * from test;
+----+-----------+-------------+
| ID | Order_ID | Price_total |
+----+-----------+-------------+
| 1 | 145131343 | 118.35 |
| 2 | 145131349 | 79.35 |
+----+-----------+-------------+
2 rows in set (0.00 sec)
如果我将 csv 中的顺序更改为:
Order_ID;Price_total
145131343;79,35
145131349;118,35
我得到以下内容:
Query OK, 2 rows affected, 1 warning (0.04 sec)
Records: 2 Deleted: 0 Skipped: 0 Warnings: 1
mysql> show warnings;
+-------+------+--------------------------------------------------+
| Level | Code | Message |
+-------+------+--------------------------------------------------+
| Note | 1265 | Data truncated for column 'Price_total' at row 1 |
+-------+------+--------------------------------------------------+
1 row in set (0.00 sec)
如果我像这样导入数据,则没有警告:
LOAD DATA LOCAL INFILE 'test4.csv' INTO TABLE `overig`.`test` FIELDS TERMINATED BY ';' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES (
`Order_ID`, @Price_total)
SET
`Price_total` = REPLACE(@Price_total, ',','.');
答:
0赞
Apojoost
2/20/2022
#1
如果我将表格重新设计为:
CREATE TABLE `overig`.`test`(
`ID` INT(10) AUTO_INCREMENT,
`Order_ID` DECIMAL(10) NOT NULL,
`Price_total` FLOAT(12,2),
PRIMARY KEY (`ID`)
);
所以我将数据类型从 更改为 我没有收到警告,尽管我不完全明白为什么。DECIMAL
FLOAT
如果我更改:
SET `Price_total` = 0 + REPLACE(@Price_total, ',', '.');
自:
SET `Price_total` = REPLACE(@Price_total, ',', '.');
然后它也可以在没有警告的情况下工作,但是我添加了上面的代码以避免在空的情况下收到警告。那么我还有另一个问题。@Price_total
评论