sql - una - title seo length




Longitud máxima para la dirección IP del cliente (6)

Posible duplicado:
¿Longitud máxima de la representación textual de una dirección IPv6?

¿Qué recomendaría como tamaño máximo para una columna de base de datos que almacena las direcciones IP del cliente? Lo tengo configurado en 16 en este momento, pero ¿podría obtener una dirección IP que sea más larga con IPv6, etc.?


Como se describe en el artículo de Wikipedia sobre IPv6 ,

Las direcciones IPv6 normalmente se escriben como ocho grupos de cuatro dígitos hexadecimales, donde cada grupo está separado por dos puntos (:)

Una dirección IPv6 típica:

2001:0db8:85a3:0000:0000:8a2e:0370:7334

Esto es de 39 caracteres de largo. Las direcciones IPv6 tienen una longitud de 128 bits, por lo que posiblemente podría usar una columna binaria (16), pero creo que me quedaría con una representación alfanumérica.


IPv4 utiliza 32 bits, en la forma de:

255.255.255.255

Supongo que depende de su tipo de datos, ya sea que esté almacenando como una cadena con un tipo CHAR o si está utilizando un tipo numérico.

IPv6 utiliza 128 bits. No tendrás IP más tiempo que eso a menos que incluyas otra información con ellos.

IPv6 se agrupa en conjuntos de 4 dígitos hexadecimales separados por dos puntos, como (de wikipedia):

2001:0db8:85a3:0000:0000:8a2e:0370:7334

Si lo desea, puede almacenarlo como una cadena larga de 39 caracteres. Sin embargo, hay otras formas abreviadas de escribir direcciones también. Los conjuntos de ceros se pueden truncar a un solo 0, o los conjuntos de ceros se pueden ocultar completamente con dos puntos dobles.


Para IPv4, podría salir con el almacenamiento de los 4 bytes en bruto de la dirección IP (cada uno de los números entre los períodos en una dirección IP es 0-255, es decir, un byte). Pero entonces tendrías que traducir entrando y saliendo de la base de datos y eso es complicado.

Las direcciones IPv6 son de 128 bits (a diferencia de los 32 bits de las direcciones IPv4). Por lo general, se escriben como 8 grupos de 4 dígitos hexadecimales separados por dos puntos: 2001:0db8:85a3:0000:0000:8a2e:0370:7334 . 39 caracteres son apropiados para almacenar direcciones IPv6 en este formato.

Edición: Sin embargo, hay una advertencia, consulte la respuesta de @ Deepak para obtener detalles sobre las direcciones IPv6 asignadas por IPv4. (La longitud máxima correcta de la cadena IPv6 es de 45 caracteres .)


Si desea manejar IPV6 en notación estándar, hay 8 grupos de 4 dígitos hexadecimales:

2001:0dc5:72a3:0000:0000:802e:3370:73E4

32 dígitos hexadecimales + 7 separadores = 39 caracteres.

PRECAUCIÓN: si también desea mantener las direcciones IPV4 asignadas como direcciones IPV6, use 45 caracteres como sugiere @Deepak .


Tómelo de alguien que lo haya intentado de las tres maneras ... solo use varchar (39)

El almacenamiento un poco menos eficiente supera con creces cualquier beneficio de tener que convertirlo en insertar / actualizar y formatearlo al mostrarlo en cualquier lugar.


Hay una advertencia con la estructura general de 39 caracteres IPv6. Para las direcciones IPv6 asignadas de IPv4, la cadena puede ser más larga (de 39 caracteres). Un ejemplo para mostrar esto:

IPv6 (39 caracteres):

ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:ABCD

IPv4 mapeado IPv6 (45 caracteres):

ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:192.168.158.190

Nota: los últimos 32 bits (que corresponden a la dirección IPv4) pueden necesitar hasta 15 caracteres (ya que IPv4 utiliza 4 grupos de 1 byte y tiene el formato de 4 números decimales en el rango de 0-255 separados por puntos (el carácter . , por lo que el máximo es DDD.DDD.DDD.DDD ).

La longitud máxima correcta de la cadena IPv6, por lo tanto, es 45.

Esto fue en realidad una pregunta de prueba en un entrenamiento de IPv6 al que asistí. (Todos respondimos 39!)







database-design