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