我正在尝试找到一种方法来加载一个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;
答案 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
,因为它已经是数字。