IP Adressen speichern ist ein heikles Thema – nicht nur in Hinsicht auf die Datenschutzbestimmungen. Kann man nun auf die Speicherung (aus welchen Gründen auch immer) nicht verzichten, so ist es aus verschiedenen Gründen z.B. Speicherbelegung, Performance, … besser die IP als INTEGER und nicht im „Klartext“ als VARCHAR abzuspeichern.
MySQL bietet von Haus die Funktion INET_ATON() und INET_NTOA() um IP Adressen umzuwandeln.
Mit INET_ATON() kann eine IP kann nun wie folgt umgewandelt werden:
mysql> SELECT INET_ATON('192.168.192.0') AS IP; +------------+ | IP | +------------+ | 3232284672 | +------------+ 1 row in set (0.00 sec)
Und anders herum verwendet man INET_NTOA():
mysql> SELECT INET_NTOA('3232284672') AS IP; +---------------+ | IP | +---------------+ | 192.168.192.0 | +---------------+ 1 row in set (0.00 sec)
Hinweis: Beim Umwandeln kann eine Zahl entstehen, die die maximale Größe des INT Datentyps (max. Wert 2147483648) überschreitet. Das Feld zum Speichern des INTEGERS muss UNSIGNED (also nicht vorzeichenbehaftet) sein (max. Wert 4294967295).
Leider scheint diese Methode noch nicht kompatibel zu IPv6. Aber bis zur endgültigen Einführung wird es bestimmt auch hierfür eine Lösung geben.
Weitere Informationen zum Thema:
http://dev.mysql.com/doc/refman/5.1/de/miscellaneous-functions.html
http://dev.mysql.com/doc/refman/5.1/de/numeric-types.html