在从文本文件导入数据到 MySQL 表时,转义字符(\)有什么作用?


当我们想要在字段的值之间插入逗号或任何其他字符时,使用转义字符(\)将变得非常重要。可以通过一个例子来理解。假设我们想将名为 A.txt 的文本文件中的数据导入到 MySQL 表中:

id,   Name,    Country,       Salary
105,  Chum,    Marsh,USA,     11000
106,  Danny,   Harrison,AUS,  12000

在这里,我们可以看到字段名称有两个值,第一个名称和最后一个名称由逗号分隔。现在,以下查询将从上述文本文件“A.txt”导入数据到“employee4_tbl”中:

mysql> LOAD DATA LOCAL INFILE 'd:\A.txt' INTO table employee4_tbl FIELDS TERMINATED BY ',' IGNORE 1 ROWS;
Query OK, 2 rows affected, 4 warnings (0.05 sec)
Records: 2 Deleted: 0 Skipped: 0 Warnings: 4

我们可以看到,当我们将数据从“A.txt”导入到表中时,有 4 个警告。以下查询将向我们显示已插入表中的内容:

mysql> Select * from employee4_tbl;
+------+---------+----------+--------+
| Id   | Name    | Country  | Salary |
+------+---------+----------+--------+
| 105  | Chum    | Marsh    |      0 |
| 106  | Danny   | Harrison |      0 |
+------+---------+----------+--------+
2 rows in set (0.00 sec)

以上结果集显示,MySQL 将“lastname”(它是“name”字段的值)预测为“Country”字段的值。

可以通过在文本文件中添加转义字符来消除上述问题,如下所示:

id,    Name,    Country,        Salary
105,   Chum\,   Marsh,USA,      11000
106,   Danny\,  Harrison,AUS,   12000

现在,使用以下查询将此文本文件导入到 MySQL 表中:

mysql> LOAD DATA LOCAL INFILE 'd:\A.txt' INTO table employee5_tbl FIELDS TERMINATED BY ',' IGNORE 1 ROWS;
Query OK, 2 rows affected (0.03 sec)
Records: 2 Deleted: 0 Skipped: 0 Warnings: 0

我们可以看到,与上面查询中的情况相比,现在没有警告了。现在,我们可以使用以下查询查看已导入的内容:

mysql> Select * from employee5_tbl;
+------+----------------+----------+--------+
| Id   | Name           | Country  | Salary |
+------+----------------+----------+--------+
| 105  | Chum,Marsh     | USA      |  11000 |
| 106  | Danny,Harrison | AUS      |  12000 |
+------+----------------+----------+--------+
2 rows in set (0.00 sec)

更新于: 2020-02-04

324 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告