나는 MySQL 5.6을 사용하여 INET6_ATON
및 IS_IPV6
과 같은 새로운 기능을 실험하고 있습니다. 스크립트가 IPV4
을 읽으면 데이터를 테이블에 완벽하게 삽입합니다. 그러나 IPv6
의 경우 INET6_ATON
만 작동하더라도 (ipTo)
행 중 하나가 실패합니다.LOAD DATA LOCAL INFILE에서 INET6_ATON을 사용할 때 null 반환
내 테이블 : 4 fileds
`geoIPID` INT NOT NULL AUTO_INCREMENT ,
`IPFrom` VARBINARY(16) NOT NULL ,
`IPTo` VARBINARY(16) NOT NULL ,
`countries_countryID` INT NOT NULL
테이블에 텍스트 파일을로드하는 스크립트 :
LOAD DATA LOCAL INFILE '/Users/Invictus/Documents/htdocs/overkill/etcs/IPV6.csv'
INTO TABLE `overkill`.`geoIP`
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(@IPFrom, @IPTo, @dummy, @dummy, @countryAbbreviation, @dummy)
SET IPFrom = IF(IS_IPV4(@IPFrom),
INET_ATON(@IPFrom),
INET6_ATON(@IPFrom)),
IPTo = IF(IS_IPV4(@IPTo),
INET_ATON(@IPTo),
INET6_ATON(@IPTo)),
countries_countryID =
(
SELECT IF (COUNT(*) != 0, `countries`.`countryID`, 999)
FROM `countries`
WHERE `countries`.`countryAbbreviation` = @countryAbbreviation
LIMIT 1
);
IPV4.csv 파일이 같은 :
"1.0.0.0","1.0.0.255","16777216","16777471","AU","Australia"
"1.0.1.0","1.0.3.255","16777472","16778239","CN","China"
"1.0.4.0","1.0.7.255","16778240","16779263","AU","Australia"
이 같은 17,451,515,
IPV6.csv 파일 :
"2001:200::", "2001:200:ffff:ffff:ffff:ffff:ffff:ffff", "42540528726795050063891204319802818560", "42540528806023212578155541913346768895", "JP", "Japan"
"2001:208::", "2001:208:ffff:ffff:ffff:ffff:ffff:ffff", "42540529360620350178005905068154421248", "42540529439848512692270242661698371583", "SG", "Singapore"
"2001:218::", "2001:218:ffff:ffff:ffff:ffff:ffff:ffff", "42540530628270950406235306564857626624", "42540530707499112920499644158401576959", "JP", "Japan"
내 문제 : 경우
내가 IPv6
로드는 두 번째 행 (ipTo)
는 NULL
입니다. 왜? 파일의 모든 값은 유효하지만, MySQL은 변환하지 않습니다.