0

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

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): Incorrect integer value: '"130.20.0.0"' for column 'ipStart' at row 1

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

    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;
4

2 回答 2

0

将您的表架构更改为

CREATE TABLE ipCompare_tbl(
ipStart varchar(15) NOT NULL,
ipEnd varchar(15) NOT NULL,
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY ( id ));
于 2017-03-24T23:22:33.670 回答
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了,因为它已经是数字了。

于 2017-03-24T23:23:51.197 回答