如何从CSV文件中将IP地址加载到Mysql表中?

时间:2017-03-24 23:16:59

标签: mysql csv inet-aton

我正在尝试找到一种方法来加载一个mysql表,我用一个名为myIPs.csv的CSV文件中的IP地址调用ipCompare_tbl。

ipCompare_tbl中的字段是ipStart和ipEnd。我还为一个名为id的主键生成器字段包含了一个auto_incrementor。

我的目标是让ipCompare_tbl加载:

      ipStart      ipEnd      id
    123.10.0.0   123.0.0.255   1
    130.20.0.0   130.0.0.255   2
    140.30.0.0   140.0.0.255   3

我一直收到以下错误:     ERROR 1366(HY000):不正确的整数值:'“130.20.0.0”'用于第1行的'ipStart'列

我正在为它运行以下代码:

    DROP TABLE IF EXISTS ipCompare_tbl;
    CREATE TABLE ipCompare_tbl(
    ipStart int(10) unsigned NOT NULL,
    ipEnd int(10) unsigned NOT NULL,
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY ( id ));

    LOAD DATA INFILE 'myIPs.csv' INTO TABLE ipCompare_tbl
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    LINES TERMINATED BY ';'
    IGNORE 1 LINES;

    SELECT INET_ATON(ipStart), INET_ATON(ipEnd)
    FROM ipCompare_tbl;

2 个答案:

答案 0 :(得分:0)

将表架构更改为

CREATE TABLE ipCompare_tbl(
ipStart varchar(15) NOT NULL,
ipEnd varchar(15) NOT NULL,
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY ( id ));

答案 1 :(得分:0)

您需要在加载CSV时将IP地址转换为数字。

LOAD DATA INFILE 'myIPs.csv' INTO TABLE ipCompare_tbl
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY ';'
IGNORE 1 LINES
(@ipstart, @ipend, id)
SET ipStart = INET_ATON(@ipstart), ipEnd = INET_ATON(@ipend);

然后,当您选择时,您不需要使用INET_ATON,因为它已经是数字。