web-dev-qa-db-fra.com

Quel type de données MySQL utiliser pour une adresse IP?

Duplicate possible:
Comment stocker une adresse IP dans MySQL

Je veux obtenir l'adresse IP de $_SERVER['REMOTE_ADDR'] Et d'autres variables $_SERVER, Quel type de données est le bon pour cela?

Est-ce que VARCHAR(n)?

91
ComFreek

Les adresses IPv4 ayant une longueur de 4 octets, vous pouvez utiliser un INT (UNSIGNED) qui a exactement 4 octets:

`ipv4` INT UNSIGNED

Et INET_ATON et INET_NTOA pour les convertir:

INSERT INTO `table` (`ipv4`) VALUES (INET_ATON("127.0.0.1"));
SELECT INET_NTOA(`ipv4`) FROM `table`;

Pour les adresses IPv6, vous pouvez utiliser BINARY à la place:

`ipv6` BINARY(16)

Et utilisez PHP inet_pton et inet_ntop pour la conversion:

'INSERT INTO `table` (`ipv6`) VALUES ("'.mysqli_real_escape_string(inet_pton('2001:4860:a005::68')).'")'
'SELECT `ipv6` FROM `table`'
$ipv6 = inet_pton($row['ipv6']);
136
Gumbo

Vous avez deux possibilités (pour une adresse IPv4):

  • a varchar(15), si vous souhaitez stocker l'adresse IP sous forme de chaîne
    • 192.128.0.15 Par exemple
  • un integer (4 octets), si vous convertissez l'adresse IP en un entier
    • 3229614095 Pour l'adresse IP que j'ai utilisée auparavant


La deuxième solution nécessitera moins d’espace dans la base de données et constitue probablement un meilleur choix, même si elle implique quelques manipulations lors du stockage et de la récupération des données (en les convertissant de/en chaîne) .

A propos de ces manipulations, voir les fonctions ip2long() et long2ip() , côté PHP, ou inet_aton() et inet_ntoa() du côté de MySQL.

46
Pascal MARTIN

Pour les adresses IPv4, vous pouvez utiliser VARCHAR pour les stocker sous forme de chaînes, mais vous pouvez également les stocker sous forme d'entiers longs INT(11) UNSIGNED. Vous pouvez utiliser la fonction INET_ATON() de MySQL pour les convertir en représentation entière. L'avantage de ceci est qu'il vous permet de faire des comparaisons faciles sur eux, comme BETWEEN requêtes

fonction MySQL INET_ATON ()

5
Michael Berkowski