我已经下载了Software77的free geoip country DB。我使用Sequel Pro导入它 - 生成的表格看起来与.csv中的行数相同。
然而,以下查询返回0结果:
SELECT * FROM s77_country WHERE ip_num_start = "3000762368";
SELECT country_code FROM s77_country WHERE 3000831958 BETWEEN ip_num_start AND ip_num_end
在.csv,第49046行:
"3000762368","3001024511","ripencc","1269993600","RS","SRB","Serbia"
看起来在范围内,所以结果应该是“RS”。
这是表格设置:
CREATE TABLE `s77_country` (
`ip_num_start` int(11) DEFAULT NULL,
`ip_num_end` int(11) DEFAULT NULL,
`registry` varchar(255) DEFAULT NULL,
`assigned` bigint(11) DEFAULT NULL,
`country_code` varchar(255) DEFAULT NULL,
`country_code_long` varchar(255) DEFAULT NULL,
`country_name` varchar(255) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
我在这里缺少什么?
答案 0 :(得分:1)
您需要使用BIGINT
或int unsigned
作为您的IP_NUM。 IP num值超过2b,INT限制在那里
你的IP_NUM的最大值理论上是255 * 256 ^ 3 + 255 * 256 ^ 2 + 255 * 256 + 255,这是4294967295,是signed int可以存储的两倍
http://dev.mysql.com/doc/refman/5.0/en/integer-types.html
edit:int unsigned恰好符合该值
答案 1 :(得分:1)
实际上你错过了一个错误阶段。
值 3000831958
不符合int
的范围。使用bigint(11)
或int(11) unsigned
代替ip_num_start
和ip_num_end
。
由于范围违规,您指定的记录甚至不会插入表中。