在将文本文件中的数据导入 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年2月4日

324 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告