在从文本文件导入数据到 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)
广告