quelle devrait être la taille idéale pour stocker les adresses IPv4, IPv6 sous forme de chaîne dans la base de données MySQL. varchar (32) devrait-il être suffisant?
Réponses
Trop de publicités?En supposant représentation textuelle dans une chaîne de caractères :
- 15 caractères pour IPv4 (
xxx.xxx.xxx.xxx
format, 12+3 séparateurs) - 39 caractères (32 + 7 séparateurs) pour IPv6
Ceux qui sont de la longueur maximale de la chaîne.
Alternatives au stockage sous forme de chaîne de caractères:
- L'IPv4 est de 32 bits, de sorte que MySQL est un type de données qui peut contenir 4 octets de faire, à l'aide de
INT UNSIGNED
est commun avecINT_ATON
etINET_NTOA
pour gérer la conversion de l'adresse, de numéro d'adresse
SELECT INET_ATON('209.207.224.40'); -> 3520061480 SELECT INET_NTOA(3520061480); -> '209.207.224.40'
- Pour IPv6, malheureusement, MySQL ne pas avoir un type de données est de 16 octets, cependant on peut mettre de l'IPv6 en une forme canonique, puis les séparer en 2
BIGINT
(8 octets), ce sera toutefois utiliser deux champs.
Si vous les stockez sous forme de chaînes plutôt que de modèles de bits:
Les adresses IPv4 se composent de quatre caractères décimaux à 3 chiffres avec trois séparateurs .
, de sorte que seuls 15 caractères tels que 255.255.255.255
nécessaires.
Les adresses IPv6 se composent de huit caractères hexadécimaux à 4 chiffres avec sept séparateurs :
, ce qui nécessite 39 caractères tels que 0123:4567:89ab:cdef:0123:4567:89ab:cdef
.
l'adresse ipv6 peut-être 46 caractères.
référence: IPv4 mappée adresses IPv6 Hybride dual-stack IPv6/IPv4 implémentations de reconnaître une classe spéciale d'adresses IPv4 mappées adresses IPv6. Dans ces adresses, les 80 premiers bits sont à zéro, les 16 bits sont un, et le reste de la 32 bits de l'adresse IPv4. On peut voir ces adresses avec la première 96 bits écrits dans la norme IPv6 format, et les autres 32 bits écrits dans le coutumier de point-virgule notation des adresses IPv4. Par exemple, ::ffff:192.0.2.128 représente l'adresse IPv4 192.0.2.128. Un format obsolète pour IPv4-compatible adresses IPv6 a été ::192.0.2.128.[61]