MySQLでIPアドレスを記録する方法

INET_ATONとINET_NTOAというMySQLの関数を使います。

  • INET_ATON ・・・ IPアドレスを10進数のint型の数字に変換(192.168.0.1 ⇒ 3232235521)
  • INET_NTOA ・・・ 10進数のint型の数字をIPアドレスに変換(3232235521 ⇒ 192.168.0.1)
CREATE TABLE test(
    ip_address int(10) unsigned
)

こんなテーブルを作ってデータを入れる時は、

INSERT INTO test VALUES(INET_ATON('192.168.0.1'))

のようにします。
selectするときは、

SELECT INET_NTOA(ip_address) FROM test WHERE ip_address = INET_ATON('192.168.0.1')

とします。

容量の節約や、それに伴うディスクアクセスの高速化によるパフォーマンスの改善がメリットとして挙げられます。
IPアドレスをint型で保存しておく最大のメリットは、以下のようにbetweenや不等号による絞込みができるようになることです。

SELECT INET_NTOA(ip_address) FROM test
WHERE ip_address BETWEEN INET_ATON('192.168.0.1') AND INET_ATON('192.168.0.3');


追記:MySQLでは文字列でもBETWEENや不等号は使える - public static void main


参考:
MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.18 その他の関数