¿Mejor forma para guardar una IP en MySQL?

Hola:

He leído por varios sitios de internet cuál es la mejor forma para guardar una IP en una base de datos MySQL, pero unos dicen una cosa y otros otra diferente. Me gustaría que dierais vuestra opinión sobre esto.

Cuál sería la mejor forma para guardarla? En todos hay algo en común y es que descartan un campo de tipo 'Varchar'.

Saludos!!
Hola!

Para la IPv4 puedes utilizar INT, que utiliza 4 bytes de largo y para IPv6, utiliza BINARY (o BIN). Utiliza las funciones intet_pton( ip ), para convertir una IP en su representación binaria e inet_ntop( binario ), para convertir un número binario en la versión legible para humanos:

Tabla Usuario
CREATE TABLE usuario (
  usuarioId INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  ipv4 INT UNSIGNED,
  ipv6 BINARY(16)
);

Y con PHP:

$ip = $_SERVER['REMOTE_ADDR']; // Esta información no es viable!
$ipv4 = '';
$ipv6 = '';

if( preg_match( '^([0-9]{1,3}\.){3}([0-9]{1,3}){1}$', $ip ) )
  $ipv4 = inet_pton( $ip );
else
  $ipv6 = inet_pton( '::1' );

$sql = "INSERT INTO usuario (ipv4, ipv6) VALUES ( '$ipv4', '$ipv6' )";

// Para leer:
$result = mysqli_query( $link, "SELECT * FROM usuario LIMIT 1" );
$ipv4 = inet_ntop( $result['ipv4'] );
$ipv6 = inet_ntop( $result['ipv6'] );