2017-01-02 12 views
0

私は国別IPアドレスのデータベースを持っています。IPアドレス - MySQLデータタイプ

テーブルには2つのフィールドがあります。

LBound, tinyint 
UBound, tinyint 

私はこのようなテーブルを照会する場合:

select * from allowed where '129.250.224.1' BETWEEN lbound AND ubound 

私は3件の結果を得る:

12.205.104.0 13.16.137.9 
129.250.2.43 129.250.3.137 
129.250.16.47 129.253.255.255 

をしかし、私は唯一返すようにしたい:

129.250.16.47 129.253.255.255 

はこれですデータ型の問題?もしそうなら、どんなデータ型を使うべきですか?

答えて

1

あなたは使用することができ

http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html

INETT_ATON 

INET_NTOA 

例えば:あなたは正しく番号でIPを変換することができます。このように

SELECT INET_ATON('10.0.5.9'); 
    -> 167773449 

正確にフィルタする

+0

どのように私はこれでそれを使うのですか? die( "select * from allowed where '$ ADDRESS' BETWEEN lbound AND ubound"); – RickyD

+0

Lbound&UBoundではどのように使用しますか? – RickyD

+0

NM。とった。ありがとう。 – RickyD

0

inet_aton機能を使用すると、IPアドレステキストを数値に変換して比較することができます。このように:

SELECT * 
FROM allowed 
WHERE inet_aton('129.250.224.1') BETWEEN inet_aton(lbound) AND inet_aton(ubound); 

IPアドレスを格納するのに使用するタイプについては、私はUNSIGNED INTまたはVARBINARY(16)を使用すると思います。


関連質問 -