LOAD DATA语法:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE ‘file_name’
[REPLACE | IGNORE]
INTO TABLE tbl_name
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY ‘string’]
[[OPTIONALLY] ENCLOSED BY ‘char’]
[ESCAPED BY ‘char’]
]
[LINES
[STARTING BY ‘string’]
[TERMINATED BY ‘string’]
]
[IGNORE number LINES]
[(col_name_or_user_var,…)]
[SET col_name = expr,…]

字段之间的分隔和记录(行)之间的分隔默认是/t(即Tab)和/n。但可以改变,如:
FIELDS TERMINATED BY ‘,’ –字段用,进行分隔
LINES TERMINATED BY ‘;’ –记录用; 进行分隔
另外要注意其它操作系统的换行符与windows可能不相同。

导入案例:

1、 要导入数据的表结构

mysql> show create table host\G
*************************** 1. row ***************************
Table: host
Create Table: CREATE TABLE `host` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(15) DEFAULT NULL,
`hostname` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

2、导入数据文件

# cat host.txt
192.168.0.3,TESTDB1
192.168.0.4,TESTDB2

查看数据格式:判断是windows文件还是Linux文件
# file host.txt
host.txt: UTF-8 Unicode (with BOM) text, with CRLF line terminators

# cat -A host.txt
M-oM-;M-?192.168.0.3,TESTDB1^M$
192.168.0.4,TESTDB2

可以看出文件是UTF8格式时,并且是带有BOM。
而且是以^M为结束,所以是windows下的utf8格式,要导入前需要做处理。

清除BOM:
如果直接导入的话,第一个字段会有乱码。

所以导入前需先清除头部BOM
用vim打开数据文件,去除utf-8 BOM
:set nobomb

清除^M字符:
第一种方法:
dos2unix host.txt

第二种方法:
sed -i ‘s/^M//g’ host.txt
#注意:^M的输入方式是 Ctrl + v ,然后Ctrl + M

第三种方法:
#vim host.txt
:1,$ s/^M//g
^M 输入方法: ctrl+V ,ctrl+M

3、导入数据

数据文件两列以逗号为分隔符,分别对应ip和hostname字段。
load data local infile ‘/root/host.txt’ into table host fields terminated by ‘,’ (ip,hostname);

前面也可以不清除^M,只要设置好换行符即可,windows下的换行符为\r\n
load data local infile ‘/root/host.txt’ into table host fields terminated by ‘,’ lines terminated by ‘\r\n’ (ip,hostname);