7 ответов:
предполагая текстовое представление в строке:
- 15 символов для IPv4 (
xxx.xxx.xxx.xxxформат, 12+3 сепараторы)- 39 символов (32 + 7 сепараторы) для IPv6
это максимальная длина строки.
альтернативы хранению в виде строки:
- IPv4 является 32-битным, поэтому тип данных MySQL, который может содержать 4 байта, будет делать, используя
INT UNSIGNEDобщий вместе сINET_ATONиINET_NTOAдля обработки преобразования из адреса в номер, а из номера в адресSELECT INET_ATON('209.207.224.40'); -> 3520061480 SELECT INET_NTOA(3520061480); -> '209.207.224.40'
- для IPv6, к сожалению, MySQL не имеет типа данных, который составляет 16 байт, однако можно поместить IPv6 в каноническую форму, а затем разделить их на 2
BIGINT(8 байт), это, однако, будет использовать два поля.
численно IPv4-адрес имеет 32-разрядную длину, а IPv6-адрес имеет 128-разрядную длину. Так что вам нужно хранение по крайней мере 16 байт.
Если" строка", которую вы храните, является кодировкой адреса в байтовой форме, то 16 достаточно.
если вы храните их в виде строк, а не битовых шаблонов:
IPv4 адреса состоят из четырех 3-значных десятичных символов с тремя
.разделители, так что только занимает 15 символов, таких как255.255.255.255.IPv6-адреса состоят из восьми 4-значных шестнадцатеричных символов с семи
:разделители, так что занимает 39 символов, таких как0123:4567:89ab:cdef:0123:4567:89ab:cdef.
предполагая, что у вас нет никакой сетевой информации (например, идентификатор LL, класс или маска CIDR), IPv4-адрес может содержать до пятнадцати символов (числа 4x3+3 периода), а IPv6-адрес может содержать до 39 символов.
вы можете использовать VARBINARY(16) для хранения IPv6-адреса в двоичном формате.
приложения, которые должны использовать эти данные, могут затем использовать свои реализации inet_pton/ntop для управления этими данными, или вы можете установить UDF, как один в http://labs.watchmouse.com/2009/10/extending-mysql-5-with-ipv6-functions/
адрес ipv6 может быть 46 символов.
ссылка: Отображения IPv4 IPv6-адресов Гибридные двухстековые реализации IPv6/IPv4 распознают специальный класс адресов, IPv4-сопоставленные IPv6-адреса. В этих адресах первые 80 бит равны нулю, следующие 16 бит-единице, а оставшиеся 32 бита-IPv4-адресу. Можно увидеть эти адреса с первыми 96 битами, записанными в стандартном формате IPv6, а остальные 32 бита записаны в обычном десятичном формате обозначение IPv4. Например:: ffff: 192.0.2.128 представляет IPv4-адрес 192.0.2.128. Устаревший формат для IPv4-совместимых IPv6-адресов был:: 192.0.2.128.[61]
кроме того, что уже было сказано, существует локальный IPv6-адрес. Если вы хотите сохранить адрес, чтобы вы могли использовать строку для создания соединений, вам также нужно будет сохранить идентификатор области. В Windows это 16-битное число, в Linux это может быть имя строкового интерфейса, я не нашел максимальной длины имени интерфейса.
Comments