Quel est le moyen le plus efficace pour stocker et récupérer des adresses IP dans MySQL? Maintenant je suis en train de faire:
SELECT * FROM logins WHERE ip = '1.2.3.4'
Où ip est un VARCHAR(15)
champ.
Est-il une meilleure façon de le faire?
Quel est le moyen le plus efficace pour stocker et récupérer des adresses IP dans MySQL? Maintenant je suis en train de faire:
SELECT * FROM logins WHERE ip = '1.2.3.4'
Où ip est un VARCHAR(15)
champ.
Est-il une meilleure façon de le faire?
Pour les adresses IPv4, vous pouvez les stocker en tant que int unsigned
et l'utilisation de l' INET_ATON()
et INET_NTOA()
des fonctions pour retourner l'adresse IP à partir de sa valeur numérique, et vice-versa.
Exemple:
SELECT INET_ATON('127.0.0.1');
+------------------------+
| INET_ATON('127.0.0.1') |
+------------------------+
| 2130706433 |
+------------------------+
1 row in set (0.00 sec)
SELECT INET_NTOA('2130706433');
+-------------------------+
| INET_NTOA('2130706433') |
+-------------------------+
| 127.0.0.1 |
+-------------------------+
1 row in set (0.02 sec)
Si vous souhaitez stocker les adresses IPv4, puis vous pouvez les stocker dans un entier de 32 bits du champ.
Si vous voulez en charge le protocole IPv6 ainsi, puis une chaîne est probablement le plus facile à lire/utiliser (bien que vous pourriez techniquement de les stocker dans un de 16 octets VARBINARY()
domaine, il serait ennuyeux d'essayer de générer des instructions SQL pour sélectionner l'adresse IP "à la main")
Ce qui est le plus facile pour vous de travailler avec. La taille ou de problème de vitesse n'est pas un problème jusqu'à ce que vous savez que c'est un problème de profilage. Dans certains cas, une chaîne de caractères peut être plus facile de travailler avec si vous avez besoin de faire de la reconnaissance partielle. Mais comme un espace ou d'un problème de performances, ne vous inquiétez pas à ce sujet, sauf si vous avez de réelles raisons de s'inquiéter à ce sujet.
peut-être stocker la valeur de l'entier directement dans un champ de type entier? Une adresse IP est essentiellement 4 "shorts".
Check it out: http://en.kioskea.net/faq/945-converting-a-32-bit-integer-into-ip
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.