Il est assez courant d’avoir besoin de stocker des adresses IP dans une base MySQL et malheureusement il n’est pas très courant que la manière de faire soit optimisée. Cet article vous propose de faire le point sur le sujet, ainsi que sur une erreur qu’on rencontre quand on fait presque bien les choses, mais pas tout à fait.
Comme il n’existe pas de type natif sous MySQL pour les adresses
IP, la première idée consiste à se servir d’une chaîne de
caractères. Une adresse IPv4 fait au maximum 15 caractères
(aaa.bbb.ccc.ddd), on peut donc prendre un champ
VARCHAR(15) qui utilisera au maximum 16 octets par
valeur, soit 15 au maximum pour l’adresse plus 1 pour stocker la
taille. Pour l’exemple, voici une table visites suivant cette
idée :
CREATE TABLE visites (
user_id int(11) NOT NULL DEFAULT '0',
ip varchar(15) NOT NULL DEFAULT '',
…