0

Software77 の無料の 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;

ここで何が欠けていますか?

4

2 に答える 2

1

実際には、エラーの 1 つのフェーズを見逃しています。

3000831958が の範囲に収まりませんint。との両方にbigint(11)orint(11) unsignedを代わりに使用します。ip_num_startip_num_end

範囲違反のため、指定したレコードはテーブルに挿入されません。

選択クエリは問題ありません。

于 2013-10-10T12:49:16.010 に答える
1

IP_NUMにはBIGINTまたはを使用する必要があります。int unsignedIP num 値が 2b を超え、INT がそこで制限されます

IP_NUM の最大値は、理論的には 255*256^3+255*256^2+255*256+255 であり、これは 4294967295 であり、signed int が格納できる値の 2 倍です。

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

編集: int unsigned はその値に正確に適合します

于 2013-10-10T12:39:04.467 に答える