【问题标题】:What is the issue with "FIELDS TERMINATED BY" and "LINES TERMINATED BY"?“FIELDS TERMINATED BY”和“LINES TERMINATED BY”有什么问题?
【发布时间】:2017-12-13 23:29:59
【问题描述】:

所以我创建了一个名为 specs 的 mysql 表,我想将一个 csv 文件导入到该表中。

CREATE TABLE specs (
  `Id` INT NOT NULL,
  `Brand` VARCHAR(40) NOT NULL,
  `Horsepower` INT NOT NULL,
  `Range` INT NOT NULL,
  PRIMARY KEY (Id)
);

csv 数据如下所示

ID\Brand\Horsepower\Range
1\Mercedes Benz\237\634
2\Audi\345\567
3\Ford\190\456
4\BMW\278\547
5\Toyota\123\364
6\Fiat\90\289
7\Daihatsu\120\450
8\Jeep\500\670
9\Seat\119\289
10\Mitsubishi\78\410

这就是我导入数据的方式,但表格中填充了零。问题出在哪里。我认为问题出在 FIELDS 和 LINES TERMINATED BY 上。

LOAD DATA LOCAL INFILE '/Users/anilyelin/Desktop/cars.csv'
INTO TABLE specs
FIELDS TERMINATED BY '\\'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS

输出如下所示:

mysql> select * from specs;
+----+-------+------------+-------+
| Id | Brand | Horsepower | Range |
+----+-------+------------+-------+
|  1 |       |          0 |     0 |
|  2 |       |          0 |     0 |
|  3 |       |          0 |     0 |
|  4 |       |          0 |     0 |
|  5 |       |          0 |     0 |
|  6 |       |          0 |     0 |
|  7 |       |          0 |     0 |
|  8 |       |          0 |     0 |
|  9 |       |          0 |     0 |
| 10 |       |          0 |     0 |
+----+-------+------------+-------+
10 rows in set (0,00 sec)

【问题讨论】:

  • 如果设置了 NO_BACKSLASH_ESCAPES(不太可能),请务必使用其他符号,而不是反斜杠 `\. Maybe FIELDS TERMINATED BY '\'`。
  • CSV 不是标准化的,但即便如此,使用反斜杠作为分隔符也是极不寻常的。最好让生成这个的人使用逗号或制表符来分隔它们。如果你不能这样做,我会尝试@JoopEggen 提到的NO_BACKSLASH_ESCAPES sql 模式,或者看看将ESCAPED BY 设置为反斜杠以外的其他内容是否会有所帮助。

标签: mysql sql database csv


【解决方案1】:

您应该尝试将字段分隔符 \ 替换为管道 |

LOAD DATA LOCAL INFILE '/Users/anilyelin/Desktop/cars.csv'
INTO TABLE specs
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS

【讨论】:

    猜你喜欢
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    相关资源
    最近更新 更多