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

Posted

技术标签:

【中文标题】无法从导入的 MySQL 数据库中获取地理位置结果【英文标题】:Can't fetch a geolocation result from imported MySQL database 【发布时间】:2013-10-10 12:18:39 【问题描述】:

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

我在这里错过了什么?

【问题讨论】:

您在每条语句的末尾都缺少分号。尝试使用它。 我错误地省略了我的问题中的分号。即使有它,查询也会返回 null。 ip_num 不适合有符号整数 【参考方案1】:

您需要使用BIGINTint unsigned 作为您的IP_NUM。 IP num 值超过 2b,INT 被限制在那里

理论上,IP_NUM 的最大值为 255*256^3+255*256^2+255*256+255,即 4294967295,是有符号整数可以存储的两倍

http://dev.mysql.com/doc/refman/5.0/en/integer-types.html

edit: int unsigned 正好符合那个值

【讨论】:

【参考方案2】:

实际上你已经错过了一个阶段的错误。

3000831958 值不在int 的范围内。使用bigint(11)int(11) unsigned 而不是ip_num_startip_num_end

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

您的选择查询很好。

【讨论】:

unsigned int 实际上就足够了,请阅读我 10 分钟前的回答

以上是关于无法从导入的 MySQL 数据库中获取地理位置结果的主要内容,如果未能解决你的问题,请参考以下文章

将查询结果插入 mysql 中的列时,无法从发送到 GEOMETRY 字段的数据中获取几何对象

Node.js mysql在函数外导入查询结果[重复]

无法从数据库 XAMPP 中获取结果 [重复]

无法从 MySql 数据库中获取 ResultSet

如何指定从哪个列位置开始从excel到mysql的数据导入

无法从 WAMP 的旧安装(数据库)为 wordpress 导入/复制数据库