Какой должен быть идеальный размер для хранения адресов IPv4, IPv6 в виде строки в базе данных MySQL. должен ли varchar (32) быть достаточным?
Размер для хранения IPv4, адресов IPv6 в виде строки
Ответ 1
Предполагая текстовое представление в строке:
- 15 символов для формата IPv4 (
xxx.xxx.xxx.xxx
, 12 + 3 сепараторы) - 39 символов (32 + 7 разделители) для IPv6
Это максимальная длина строки.
Альтернативы хранению в виде строки:
- IPv4 - 32-разрядный, поэтому тип данных MySQL, который может содержать 4 байта, будет использовать, используя
INT UNSIGNED
, вместе сINT_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 байтов), однако это будет использовать два поля.
Ответ 2
Численно, IPv4-адрес имеет длину 32 бит, а IPv6-адрес - 128 бит. Таким образом, вам нужно хранить по меньшей мере 16 байт.
Если "строка", которую вы храните, является кодировкой адреса в байтовой форме, тогда достаточно 16.
Ответ 3
Если вы храните их как строки, а не битовые шаблоны:
Адреса IPv4 состоят из четырех трехзначных десятичных символов с тремя разделителями .
, поэтому только 15 символов, таких как 255.255.255.255
.
Адреса IPv6 состоят из восьми 4-значных шестнадцатеричных символов с семью разделителями :
, поэтому он принимает 39 символов, таких как 0123:4567:89ab:cdef:0123:4567:89ab:cdef
.
Ответ 4
Предполагая, что у вас нет какой-либо сетевой информации (например, LL-идентификатор, класс или CIDR-маска), адрес IPv4 может содержать до пятнадцати символов (4x3 номера + 3 периода), а IPv6-адрес может быть до 39 символы.
Ответ 5
Вы можете использовать VARBINARY (16) для хранения адреса IPv6 в двоичном формате.
Приложения, которые должны использовать эти данные, могут затем использовать свои inet_pton/ntop реализации для управления этими данными, или вы можете установить UDF, как тот, который находится в http://labs.watchmouse.com/2009/10/extending-mysql-5-with-ipv6-functions/
Ответ 6
адрес 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]
Ответ 7
Кроме того, что уже было сказано, есть адрес Link-Local IPv6. Если вы хотите сохранить адрес, чтобы вы могли использовать строку для создания соединений, вам также понадобится сохранить идентификатор области. В Windows это 16-разрядное число, в Linux это может быть имя интерфейса, я не нашел максимальную длину имени интерфейса.