Мне нужно создать поле в таблице mysql для хранения IP-адресов. Мне нужно знать максимальное количество символов, которое может содержать IP-адрес. Будь то ipv4, ipv6 или какой-либо другой тип, который может сделать допустимый IP-адрес необычно длинным. Так какое ограничение на количество символов мне следует установить?
Я спрашиваю о длине в том смысле, что слово «foo» состоит из 3 символов, а не в байтах или чем-то подобном.
решение1
Адрес IPv6 в самом длинном случае будет состоять из 8 наборов по 4 символа (всего 32), каждый набор будет разделен двоеточием. Это составляет 39 символов.
Адрес IPv4 состоит максимум из 4 наборов по 3 цифры (12 символов), каждый набор разделен точкой (.). Это составляет 15 символов.
Все это предполагает, что IP-адреса должны храниться в удобной для восприятия форме. Я предпочитаю хранить IP-адреса в десятичной форме, поскольку никогда не знаешь, как они будут использоваться. Ваш вариант может отличаться.
решение2
Это не так просто, как можно подумать.
В большинстве случаев вы в безопасности с45.
Обычный адрес IPv6
0000:0000:0000:0000:0000:0000:0000:0000
8 * 4 + 7 =39
IPv6-адрес, сопоставленный с IPv4
Видетьrfc4291
0000:0000:0000:0000:0000:ffff:192.168.100.228
(6 * 4 + 5) + 1 + (4 * 3 + 3) = 29 + 1 + 15 =45
Заголовочные файлыопределить INET6_ADDRSTRLEN как46
IPv6 с областью действия
Видетьrfc4007
Зона области действия может быть числом или даже строкой (именем интерфейса).
ff02::5678%5
ff08::9abc%interface10
Длина имени интерфейса зависит от системы. В Linux она определяется константой IFNAMSIZ. 16 — это обычное значение. С 45 символами выше:
45 + 1 + 16 =62
Также смhttps://stackoverflow.com/questions/166132/максимальная-длина-текстового-представления-адреса-ipv6