Я всегда использовал либо строку, либо два 64-битных целых числа.Первый - в случае, когда я просто хочу записать его, второй - в случае, когда мне нужно выполнить расчеты относительно того, содержится ли определенный адрес в определенной сети, или даже если две сети перекрываются.
Когдасохраняя его как целое число, единственный вариант - разделить его на два 64-битных числа.Поскольку это делает сравнения более громоздкими, я бы не стал этого делать, если вам не нужны численные расчеты, чтобы посмотреть, попадает ли IP в определенную сеть.
Я бы не слишком беспокоился о производительности для хранения адресов IPv6 встрока - в зависимости от того, сколько поисков вы делаете для данных.Обычно их очень мало или просто очень мало данных.Да, хранение и поиск менее эффективны, чем с числами, но это не намного более болезненно, чем хранение адресов электронной почты, имен людей или имен пользователей.
И почему вы не сможете смешивать IPv4 и IPv6 встроковые поля?Их легко отличить при поиске.Их диапазон возможных значений не перекрывается.
Короче: используйте числа для проверки перекрытий, используйте строки в другом месте.Неэффективность струн не имеет значения по сравнению с простотой использования.