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

标签 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;

我在这里缺少什么?

最佳答案

您需要对您的 IP_NUM 使用 BIGINTint unsigned。 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

编辑:int unsigned 完全符合该值

关于mysql - 无法从导入的 MySQL 数据库获取地理定位结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19295562/

相关文章:

mysql - 在不同别名下计算同一张表上的同一列?

sql - 从 Snowflake 中的开始日期和结束日期列创建日期数组

mysql - 当我需要知道另一个表的外键值时,如何将数据插入到一个表中?

java.sql.SQLException : No database selected

sql - 正则表达式匹配除特定给定字符串之外的任何内容(包括空字符串)

php - 更多的 MySql 表会减慢对 MySql 数据库的搜索吗?

MySQL 按用户名和以下表选择数据

sql - join 语句中的别名问题

sql - Google 表格查询 - 为未记录数据的日期填零

c# - 使用 system.data.sqlclient.dll 安装客户端