无法从导入的MySQL数据库中获取地理定位结果

时间:2013-10-10 12:18:40

标签: mysql sql database geolocation

我已经下载了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;

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

您需要使用BIGINTint 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_startip_num_end

由于范围违规,您指定的记录甚至不会插入表中。

您的选择查询没问题。